Ich versuche, beim Booten in Ubuntu Server 18.04 ein Skript zu laden. Mein .service
Skript ist in installiert /etc/systemd/system
und ich kann Folgendes ausführen:
service my-service start
Und:
service my-service stop
Aber wenn ich versuche, es beim Booten auszuführen (was ich laut Internet tun sollte), mit:
service my-service enable
Das System antwortet mit:
my-service: unrecognised service
Eine Suche im Internet liefert mir nur Informationen dazu, wie es in älteren Ubuntu-Versionen funktioniert, die nicht auf 18.04 zutreffen, und ich bin nicht in der Lage, die richtige Terminologie zu ermitteln, um die Antwort zu finden.
Das Skript:
# filename: /etc/systemd/system/my-service.service
[Unit]
Description=My Service
After=network.target
After=mysqld.service
[Service]
User=the-user
WorkingDirectory=/home/the-user/path-to-script
ExecStart=/home/the-user/path-to-script/start.sh
SuccessExitStatus=0
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Meine Frage ist: Was mache ich falsch? Wie kann ich diesen Dienst beim Booten starten?
Antwort1
Verwenden Sie den tatsächlichen Befehl. Dieser systemd
lautet:
sudo systemctl enable my-service
Zur Referenz: Sie müssen nicht das Hauptsystemverzeichnis für die Unit-Datei verwenden, wenn Sie möchten, dass sie für einen normalen Benutzer, z. B. Ihren eigenen, ausgeführt wird. Sie können sie in einem Verzeichnis wie diesem erstellen:
~/.config/systemd/user/
Dann können Sie Folgendes tun:
systemctl --user enable my-service
Dadurch entfällt die Notwendigkeitsudo
Wie Sie in Ihrem Kommentar angemerkt haben, sollten bei der Ausführung von benutzerspezifischen Instanzen systemd
der Direktive keineUser
Antwort2
Notiz:
In anderen Fällen, in denen der gleiche Fehler auftritt:
Der service
Befehl setzt dieObjektErste !
service foo start
Dersystemctl
Der Befehl bewirkt das Gegenteil:
systemctl start foo
Darüber hinaus können Sie im Dienst nicht „.service“ hinzufügen, während dies bei Verwendung von systemctl möglich ist.