Ich habe einen systemd-Dienst erstellt:
[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
Ich legte es in den Ordner / etc / systemd / system und nannte es mine.service.
Wenn ich renne sudo service mine start
, gibt es mir:
Fehler beim Starten von mine.service.Unit mine.service nicht gefunden
--- UPDATE -----
Ich laufe zuerst sudo systemctl daemon-reload
und jetzt gibt es mir keine Nachrichten, aber der Dienst startet immer noch nicht.
systemctl daemon-reload
nach dem Erstellen Ihrer Unit-Datei ausgeführt?Antworten:
$HOME
verweist auf das Basisverzeichnis des Benutzers, der das Skript ausführt. Systemd-Dienste werden mit root gestartet, dies wird wahrscheinlich versucht/root/theFolder/run.sh
. Verwenden Sie absolute Pfade in Servicedateien.Sie haben auch die
forking
Option gesetzt. Dies wird für das Programm benötigt, das sich im Hintergrund befindet. Tut Ihr Skript dies? Die meisten tun dies nicht, und wenn dies bei Ihnen nicht der Fall ist, sollten Sie diese Option entfernen, oder systemd wartet darauf, dass Ihr Skript beendet wird, um es als gestartet zu beanspruchen.Auch Systemdienstdateien, die auf Skripte in Ihrem Home-Verzeichnis verweisen, sind nicht empfehlenswert und möglicherweise ein Sicherheitsrisiko. Da sie als Root ausgeführt werden, kann jeder, der sie ändern kann, möglicherweise Root-Zugriff auf Ihren Computer erhalten. Es ist weitaus besser, das Skript zu kopieren
/usr/local/bin
und sicherzustellen, dass es im Besitz des Benutzers ist und nur von root geschrieben werden kann, um dies zu verhindern. Es ist auch eine gute Idee, das Skript unter Verwendung der OptionenUser=
undGroup=
in der Servicedatei als nicht privilegierter Benutzer auszuführen .Wenn Sie es als Benutzer ausführen möchten, ist es besser, die Servicedatei einzutragen
~/.config/systemd/user/
und sie mit zu starten / zu aktivierensystemctl --user enable yourservice && systemctl --user start yourservice
(beachten Sie, dass Sie als Benutzer ausgeführt werden, der nicht root ist). Sehen Sie diese für weitere Informationen über Benutzer - Service - Dateien.quelle
HOME=$HOME
die erste Umgebungsdatei einzufügen . Aber der Dienst konnte nicht gestartet werden, keine Fehler.