[Nie dotyczy to bezpośrednio pliku systemd-tmpfiles, ale myślę, że już wiesz, że w tym konkretnym przypadku lepiej jest użyć echa.]
Po pierwsze, „multi-user.target” może, ale nie musi być tym, czego chcesz używać. Jeśli znasz koncepcję poziomów uruchamiania z elementów inicjujących w stylu SysV, wielu użytkowników jest systemowym odpowiednikiem poziomu pracy 3, który jest systemem dla wielu użytkowników, który uruchamia się na konsoli, a nie GUI. Odpowiednikiem poziomu uruchamiania 5, który uruchamia się do X, jest program graficzny . Wartość domyślna jest określona przez dowiązanie symboliczne w /etc/systemd/system
(i / lub /lib/systemd/system
; ten w /etc
zastąpi ten w /lib
) o nazwie default.target , użyj ls, aby znaleźć miejsce, w którym wskazuje:
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
Dla normalnych komputerów z linuksem będzie to grafika. Cel. Nie jest to tak naprawdę ważne, jeśli chcesz, aby usługa rozruchowa, którą tworzysz, uruchamiała się niezależnie od domyślnego poziomu uruchamiania / celu - w takim przypadku możemy po prostu użyć default.target i nie martw się, po co to jest alias. Jeśli jednak używasz wielu użytkowników, a domyślnie jest to grafika, usługa nie będzie dostępna.
W zależności od usługi mogą istnieć bardziej odpowiednie i określone cele lub usługi, od których chcesz uruchomić ten w związku z usługą. W oparciu o inne pytanie default.target prawdopodobnie jest w porządku. Uwaga: różnica między „celem” a „usługą” polega na tym, że usługa zawiera [Service]
sekcję, która faktycznie uruchamia proces; cel jest po prostu sposobem grupowania usług za pomocą różnych dyrektyw „zależnych” i „wymagających”; nie robi nic poza wyzwalaniem innych celów lub usług.
Uruchomienie usługi zależy od tego, jakie inne usługi wyraźnie od niej zależą. W przypadku prostego, samodzielnego zdarzenia, takiego jak to, które chcemy uruchomić późno w procesie rozruchu, możemy użyć tej kombinacji dyrektyw:
[Unit]
After=default.target
[Install]
WantedBy=default.target
Sekcja „Instaluj” jest używana podczas instalowania usługi; „WantedBy” określa cel, do którego chcemy dołączyć tę usługę (co oznacza, że będzie działać, jeśli ten cel się spełni, ale nie. Nie określa to, kiedy będzie działać w stosunku do innych ). Ponieważ tak naprawdę chcemy, aby ta usługa działała później niż wcześniej, określamy klauzulę „Po”. To niekoniecznie musi być taki sam, jak cel WantedBy (zwykle nie jest) i można go całkowicie pominąć, jeśli nie obchodzi Cię, kiedy to się stanie; Używam tego tylko przy przeczuciu, że większość innych rzeczy będzie działać w stosunku do rzeczy, które są gdzieś powiązane z czymś określonym Before=default.target
(co mogliśmy również wykorzystać; potrzeby celu są oceniane przed uruchomieniem celu).
Na przykład po prostu powtórzę „hello world” na konsoli. Sama usługa jest opisana w [Service]
sekcji:
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
Polecenie wymaga pełnej ścieżki. Powodem, dla którego nie tylko użyłem, /usr/bin/echo "hello world"
jest to, że nie zadziała (myślę, że dane wyjściowe idą do / dev / null), a podczas gdy usługa wykonująca echo "hello world" > /dev/console
testament, eksperymenty pokazują, że użycie przekierowania powłoki w dyrektywie ExecStart nie będzie . Tak / usr / local / bin / helloworld jest skryptem powłoki z tej jednej linii echo "hello world" > /dev/console
.
Zwróć uwagę na to Type=forking
, co jest konieczne dla skryptu powłoki.
Nasza kompletna, minimalny plik obsługa jest po prostu te trzy sekcje ( [Unit]
, [Service]
, i [Install]
). Aby zainstalować, umieść do niego plik lub dowiązanie symboliczne w / etc / systemd / system lub / usr / lib / systemd / system i:
systemctl --system enable helloworld
Powinien wydrukować ln -s ...
. To nie uruchamia usługi, po prostu konfiguruje ją do uruchamiania podczas rozruchu, jak omówiono powyżej.
To w skrócie. man systemd.unit
i man systemd.service
mieć więcej szczegółów.