nie można uruchomić usługi

16

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-reloada teraz nie daje mi żadnych wiadomości, ale usługa nadal się nie uruchamia.

Jerzy
źródło
10
Czy uruchomiłeś systemctl daemon-reloadpo utworzeniu pliku jednostki?
Wieland
@Wieland: Hmm .. Teraz nie pokazuje mi żadnych wiadomości, ale nadal się nie uruchamia.
George
@don_crissti: Status mówi, że jest aktywny, ale skrypt (w ExecStart) nie jest wykonywany.
George
skąd miałby znać właściwy $ HOME? Czego oczekujesz od usługi systemowej?
Serge
@ Serge: Hmm .. Więc jak mogę użyć $ HOME?
George

Odpowiedzi:

14

$HOMEwskazuje 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ż forkingustawioną 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/bini 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 opcji User=i Group=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.

Michael Daffin
źródło
: Umieszczam skrypt w / usr / local / bin, a usługę w /.config/systemd/user.Jeśli próbuję włączyć usługę, pokazuje mi „nadmiar argumentów”. Jeśli spróbuję użyć systemctl, pokazuje „nie powiodło się .. jednostka .. ”, coś takiego.
George,
Czy możesz podać pełne wypróbowane polecenia i bardziej szczegółowe dzienniki. Trudno jest debugować z fragmentami.
Michael Daffin,
: Czy istnieje rozwiązanie, aby użyć ścieżki $ HOME? Ponieważ, jeśli wstawię skrypt do / usr / local / bin, używa on ścieżek względnych do $ HOME. Widziałem to . I próbowałem umieścić HOME=$HOMEpierwszy plik środowiska. Ale usługa nie mogła się uruchomić, żadnych błędów.
George,
1
na ubuntu musiałem użyć systemctl do tego nie systemd, używając systemd dostałem błąd „Nadmiar argumentów”
Alexander Mills
1
@AlexanderMills Masz rację, poprawne polecenie w systemctl i systemd było tylko literówką w odpowiedzi.
Michael Daffin,