Utworzyłem usługę systemową:
[Unit]
Description=My service
[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=mine.service
Umieściłem go w folderze / etc / systemd / system i nazwałem go mine.service.
Jeśli uruchomię sudo service mine start
, daje mi to:
Nie udało się uruchomić mine.service.Unit mine.service nie znaleziono
--- AKTUALIZACJA -----
Najpierw uruchamiam, sudo systemctl daemon-reload
a teraz nie daje mi żadnych wiadomości, ale usługa nadal się nie uruchamia.
systemctl daemon-reload
po utworzeniu pliku jednostki?Odpowiedzi:
$HOME
wskazuje katalog domowy użytkownika, który uruchamia skrypt. Usługi systemowe są uruchamiane z rootem, więc prawdopodobnie spróbuje/root/theFolder/run.sh
. Użyj bezwzględnych ścieżek w plikach serwisowych.Masz również
forking
ustawioną opcję. Jest to potrzebne w przypadku programów, które same się wykonują, czy skrypt to robi? Większość tego nie robi, a jeśli nie, powinieneś usunąć tę opcję lub systemd będzie czekał na zakończenie skryptu, aby zająć go jako uruchomiony.Odradzane są również pliki usług systemowych, które wskazują na skrypty w katalogu domowym, i może to stanowić zagrożenie bezpieczeństwa. Ponieważ są one uruchamiane jako root, każdy, kto może je zmodyfikować, może potencjalnie uzyskać dostęp do roota na twoim komputerze. O wiele lepiej jest skopiować skrypt
/usr/local/bin
i upewnić się, że jest on własnością i można go zapisywać tylko przez root, aby to zatrzymać. Dobrym pomysłem jest również uruchomienie skryptu jako użytkownik nieuprzywilejowany, korzystając z opcjiUser=
iGroup=
w pliku usługi.Jeśli chcesz uruchomić go jako użytkownik, lepiej jest umieścić plik usługi
~/.config/systemd/user/
i uruchomić / włączyć go za pomocąsystemctl --user enable yourservice && systemctl --user start yourservice
(uwaga, uruchom jako użytkownik nie root). Zobacz to, aby uzyskać więcej informacji na temat plików usługi użytkownika.źródło
HOME=$HOME
pierwszy plik środowiska. Ale usługa nie mogła się uruchomić, żadnych błędów.