Właśnie zaktualizowałem serwer Ubuntu 14 do wersji 15. Miałem problem z uruchomieniem skryptu upstart po aktualizacji i przeczytałem, że systemd jest nowym domyślnym. Nie jestem ekspertem od Linuksa, więc proszę, uspokój się :-)
Oto, czym był mój skrypt wstępny:
description "NZBGet upstart script"
setuid robert
setgid robert
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
exec nzbget -D
end script
pre-stop script
exec nzbget -Q
end script
Opierając się na stronie wiki upstart do systemd , użyłem podanych tam tabel, aby zmapować rzeczy tak dokładnie, jak to możliwe w moim nowym pliku usługi systemd:
[Unit]
Description=NZBGet Service
[Service]
Type=forking
ExecStart=/usr/local/bin/nzbget -D
ExecStop=/usr/local/bin/nzbget -Q
Restart=on-failure
Ten plik znajduje się na stronie /home/robert/.config/systemd/user/nzbget.service
. Aby ręcznie uruchomić usługę, robiłem:
$ systemctl --user start nzbget
To działa świetnie. Jednak po wylogowaniu z sesji SSH usługa zostaje wyłączona. Ponadto nie uruchamia się podczas uruchamiania lub logowania użytkownika. Chcę, aby zachowywał się tak samo, jak w przypadku usługi upstart: chcę, aby uruchamiał się przy rozruchu, działał nieprzerwanie i jako określony użytkownik.
Co muszę zrobić, aby uzyskać tę konfigurację?
systemctl enable
poleceniu, na początku nie było to dla mnie oczywiste. Również włączenie dało mi ostrzeżenie o brakującej[Install]
sekcji. Zignorowałem to, ale nie jestem pewien, czy wpłynie to na jego zdolność do uruchamiania w czasie rozruchu.Install
Ostrzeżenie było rzeczywiście bardzo ważne. Nie uruchomi się przy rozruchu bezWantedBy=multi-user.target
pod[Install]
sekcją. Po dodaniu do tego.service
pliku, a następnie możnaenable
go.[Install]
sekcji. Mam nadzieję, że teraz jest to bardziej pomocne dla każdego, kto go szuka.[email protected]
aenable
d jak[email protected]
ustawienie staje sięUser=%i
oznaczające, że użytkownik nie jest zakodowany na stałe i wielu użytkowników może korzystać z tej samej definicji. Przykład./etc/systemd/user/
?Być może zainteresuje Cię użycie funkcji systemd do „utrzymywania użytkownika”. Jest włączony przez
loginctl enable-linger USERNAME
.Powoduje to uruchomienie osobnego menedżera usług dla danego użytkownika podczas rozruchu, więc jednostki zdefiniowane przez użytkownika
~/.config/systemd/user
zostaną pobrane i przetworzone podczas rozruchu i wyłączenia zgodnie z konfiguracją usługi.Możesz także użyć
systemctl --user
do zarządzania usługami i ich konfigurowania, które będą działać na menedżerze usług użytkownika, a nie na systemie.źródło
systemctl --user
to fantastyczne odkrycie. Dzięki!systemctl --user
nie działa to w przypadku sesji SSH.