Czytanie man 5 systemd.unit
i man 5 systemd.target
mówi nam, że pliki jednostek są używane do definiowania celów, a także wszystkiego innego systemowego. Nie ma żadnej dokumentacji dotyczącej tego, jak utworzyć cel , więc trudno jest określić, jak należy to zrobić, ale nie różni się zbytnio od tworzenia usługi.
Podczas tworzenia celu konieczne będzie utworzenie dowiązań symbolicznych do target.wants
katalogu z katalogu usług systemd. Następnie możesz ustawić / uruchomić swój cel. Oto jak może wyglądać na podstawie Twojego przykładu.
/etc/systemd/system/foo.target
To jest plik jednostki celu. Jeśli jako przykład weźmy graficzny.target, możemy stworzyć własny cel, używając go jako podstawy.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Aby wyjaśnić opcje zaczerpnięte ze stron systemowych;
Description
- Opisuje cel. Powinieneś zrozumieć
Requires
- Trudne zależności od celu. Powinieneś pozwolić na uruchomienie podstawowego systemu przed uruchomieniem własnych usług
Wants
- Miękkie zależności. Cel nie wymaga ich uruchomienia.
Conflicts
- Jeśli jednostka ma ustawienie Konflikty na innej jednostce, uruchomienie pierwszej spowoduje zatrzymanie drugiej i odwrotnie.
After
- Buty po tych usługach
AllowIsolate
- Naprawdę zależy od ciebie i twojego środowiska. Szczegóły są dostępne na stronie podręcznikasystemd.unit(5)
/etc/systemd/system/foo.target.wants/
To jest katalog, w którym podłączysz usługi, które tworzysz / potrzebujesz dla swojego celu. Jest to odpowiednik Wants=
opcji w pliku jednostkowym. Utwórz ten katalog, a następnie utwórz takie dowiązania symboliczne; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Spowoduje to utworzenie dowiązania symbolicznego z bar.service w katalogu systemowym do katalogu foo.target.wants.
Myślę, że utworzenie pliku jednostkowego dla usługi jest w pewnym sensie poza zakresem tej odpowiedzi, a to pytanie jest zdecydowanie bardziej udokumentowane, więc na razie o tym nie wspominam. Kiedy tworzysz plik jednostki, po prostu symlinkuj go do katalogu target.wants lub dodaj go do Wants=
dyrektywy.
foo.target
doRequires
pola iBefore
polamulti-user.target
, i to podobaRequires: base.target foo.target
. Następnie ponownie uruchomię Arch Arch vm ifoobar.service
uruchomię się automatycznie jako demon.