Muszę uruchomić systemd-tmpfiles --create
podczas procesu rozruchu z dystrybucją systemową. Więc muszę utworzyć systemowy plik .service wykonujący tę pracę.
W tym pytaniu możesz przeczytać wszystkie szczegóły na temat tego, czego potrzebuję i dlaczego: Jak działa systemd-tmpfiles?
Przeczytałem o tym kilka dokumentów i piszę następujący test:
[Unit]
Description=Execute tmpfiles to disable usb-wakeup # see details in the link above
Requires=multi-user.target # see details in the link above
After=multi-user.target # see details in the link above
[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-tmpfiles --create
[Install]
WantedBy=multi-user.target
Ale nie jestem pewien, ponieważ systemd-tmpfiles
nie jest to prosty program, ale sam element systemowy. Nie chciałbym zepsuć mojego systemu.
Wszelkie wskazówki dotyczące prawidłowego pliku .service?
arch-linux
systemd
eang
źródło
źródło
Odpowiedzi:
[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: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:
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: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ącaecho "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 liniiecho "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: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
iman systemd.service
mieć więcej szczegółów.źródło
default.target
nie ma/etc/systemd/system
, ale jest tylko w/usr/lib/systemd/system
default.target
można znaleźć w/lib/systemd/system/default.target
systemctl set-default ...
zostawiam dowiązanie symboliczne/etc/systemd/system
, ale nie zmienia tego w/lib
, tzn. wskazują inne cele, ale rzeczy w pierwszym powinny zastąpić drugie. Jeśli sam to ustawisz, może się zdarzyć. W każdym razie edytowałem w obu lokalizacjach.W przypadku usługi systemd-tmpfiles: powinna być dostarczana z Twoją dystrybucją, ale zawsze możesz pobrać plik usługi z wcześniejszego repozytorium git
źródło