Wiele skryptów inicjujących sysv używało odpowiedniego pliku, /etc/default
aby administrator mógł go skonfigurować. Zadania upstart można modyfikować za pomocą .override
plików. Jak zastąpić lub skonfigurować jednostki systemowe, skoro systemd jest domyślny w Ubuntu?
109
ExecStart=
pustego wpisu nie można wstawić następującego komentarza:ExecStart= # Empty line to clear previous entries.
To będzie traktowane jako kolejnyExecStart=
wpis i dodawane do listy. PS. Nie mogłem dodać komentarza do odpowiedzi Muru z powodu mojej niskiej reputacji.Odpowiedzi:
systemd
jednostki nie muszą słuchać plików w/etc/default
.systemd
jest łatwo konfigurowalny, ale wymaga znajomości składni plików jednostek systemowych.Pakiety wysyłają pliki jednostek zwykle w
/lib/systemd/system/
. Są to nie ma być edytowany. Zamiast tegosystemd
pozwala zastąpić te pliki, tworząc odpowiednie pliki w/etc/systemd/system/
.Dla danej usługi
foo
pakiet zapewniłby/lib/systemd/system/foo.service
. Możesz sprawdzić jego status za pomocąsystemctl status foo
lub przejrzeć jego logi za pomocąjournalctl -u foo
. Aby zastąpić coś w definicjifoo
, wykonaj:Spowoduje to utworzenie katalogu o
/etc/systemd/system
nazwie po jednostce ioverride.conf
pliku w tym katalogu (/etc/systemd/system/foo.service.d/override.conf
). Możesz dodać lub zastąpić ustawienia, używając tego pliku (lub innych.conf
plików w/etc/systemd/system/foo.service.d/
).Przesłanianie argumentów poleceń
Weźmy
getty
na przykład usługę. Powiedz, że chcę mieć autologin TTY2 dla mojego użytkownika (nie jest to wskazane, ale tylko przykład). TTY2 jest uruchamiany przezgetty@tty2
usługę (tty2
będącą instancją szablonu/lib/systemd/system/getty@service
). Aby to zrobić, muszę zmodyfikowaćgetty@tty2
usługę.W szczególności muszę zmienić
ExecStart
linię, która obecnie jest:Aby to zmienić, wykonaj:
I dodaj:
Uwaga:
ExecStart
przed ustawieniem go ponownie, jak to, że jest to ustawienie dodatek, podobnieAfter
,Environment
(jako całość, a nie per-zmienna) iEnvironmentFile
, w przeciwieństwie do nadrzędnych i jak ustawieniaRestartSec
lubType
.ExecStart
może mieć wiele wpisów tylko dlaType=oneshot
usług.ExecStart
znajduje się w[Service]
sekcji, więc moje zastąpienie musi również umieścićExecStart
w[Service]
sekcji. Często po przejrzeniu rzeczywistego pliku usługisystemctl cat
dowiesz się, co należy zastąpić i w której sekcji się znajduje.Zwykle jeśli edytujesz plik jednostki systemowej, aby zadziałał, musisz uruchomić:
Jednak
systemctl edit
automatycznie robi to za Ciebie.Teraz:
A jeśli to zrobię:
i naciśnij CtrlAltF2, presto! Będę zalogowany na moim koncie na tym TTY.
Jak powiedziałem wcześniej,
getty@tty2
jest to instancja szablonu. Co jeśli chciałbym zastąpić wszystkie wystąpienia tego szablonu? Można to zrobić, edytując sam szablon (usuwając identyfikator instancji - w tym przypadkutty2
):Przesłanianie środowiska
Częstym przypadkiem użycia
/etc/default
plików jest ustawienie zmiennych środowiskowych. Zwykle/etc/default
jest skryptem powłoki, więc można w nim używać konstrukcji języka powłoki. W przypadkusystemd
jednak tak nie jest. Możesz określić zmienne środowiskowe na dwa sposoby:Przez plik
Załóżmy, że ustawiłeś zmienne środowiskowe w pliku:
Następnie możesz dodać do zastąpienia:
W szczególności, jeśli
/etc/default/grub
zawiera tylko przypisania i brak składni powłoki, możesz użyć go jakoEnvironmentFile
.Poprzez
Environment
wpisyPowyższe można również osiągnąć za pomocą następującego zastąpienia:
Jednak może to być trudne w przypadku wielu zmiennych, spacji itp. Spójrz na jedną z moich innych odpowiedzi na przykład takiego wystąpienia.
Dalsza lektura
Dzięki temu mechanizmowi bardzo łatwo jest zastąpić
systemd
jednostki, a także cofnąć takie zmiany (po prostu usuwając plik zastępowania). To nie jedyne ustawienia, które można modyfikować.Przydałyby się następujące linki:
systemd
systemd
strony podręcznika , w szczególności strony podręcznika zsystemd.unit
isystemd.service
źródło
systemd.service(5)
podręcznika, sekcja na tematExecStart
: „O ile Type = to oneshot, należy podać dokładnie jedno polecenie. Gdy użyto Type = oneshot, można podać zero lub więcej poleceń. Polecenia można określić, podając wiele wierszy poleceń w tym samym dyrektywa lub alternatywnie ta dyrektywa może być określona więcej niż jeden raz z tym samym skutkiem. Jeśli pusty ciąg zostanie przypisany do tej opcji, lista poleceń do uruchomienia zostanie zresetowana, wcześniejsze przypisania tej opcji nie będą miały wpływu. ”sudo rm
zastąpić plik, a następniesystemctl daemon-reload
lub możeszsystemctl edit
i zastąpić wszystko w zastąpieniu komentarzami. Komentarze w plikach serwisowych zaczynają się od#
.systemctl revert foo