Wie kann ich ein Skript beim Start auf einem Ubuntu Server 17.10-Computer ausführen? Ich denke, die Methode wurde in 17.10 geändert.
quelle
Wie kann ich ein Skript beim Start auf einem Ubuntu Server 17.10-Computer ausführen? Ich denke, die Methode wurde in 17.10 geändert.
Fügen Sie das Skript in die entsprechende Benutzertabelle cron
(z. B. die crontab ) mit einem Zeitplan von ein @reboot
.
Ein Benutzer kann seine cron
Tabelle mit bearbeiten crontab -e
.
Ein Beispiel, das /path/to/script.sh
beim Start ausgeführt wird:
@reboot /path/to/script.sh
Wenn Sie es als root ausführen müssen, verwenden Sie es nicht @reboot sudo /path/to/script.sh
.
Verwenden Sie sudo crontab -eu root
diese Option, um die Crontab von Root zu bearbeiten.
Siehe auch: crontab (1), cron (8), crontab (8)
Ab Ubuntu 15.04 wird standardmäßig ein sogenanntes systemd
Programm verwendet , das Startdienste und -prozeduren automatisiert. Mit ein wenig Aufwand können Sie Ihre eigenen erstellen und zur Liste der Startup-Services hinzufügen.
Grundlegender Systemd Service
Dies ist eine Barebones- .service
Datei, die zum Starten meines Python-GUI-Servers verwendet werden kann (es hätte auch ein Shell-Skript sein können, das spielt keine Rolle):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
Die Description
Option ist eine beliebige Zeichenfolge, die beschreibt, was der Dienst ist oder tut.
Die ExecStart
Option gibt den auszuführenden Befehl an. Hier gebe ich einen Pfad zu einem ausführbaren Python-Skript an und verwende das &
Token, um es im Hintergrund auszuführen.
Die WantedBy
Option gibt die Priorität an, basierend darauf, welches Ziel diesen Dienst verwenden möchte. Wenn Sie nicht möchten, dass Ihr Dienst zu einem bestimmten Zeitpunkt ausgeführt wird, setzen Sie ihn einfach auf multi-user.target
.
Grundlegende Vorgehensweise
Schreiben Sie das Skript, das Sie beim Start ausführen möchten, mit nano
einem Editor Ihrer Wahl. Stellen Sie sicher, dass Sie den richtigen Shebang ganz oben in die Datei #!/bin/bash
einfügen ( für Bash-Skripte), und geben Sie ihr ausführbare Berechtigungen mit chmod
.
Schreiben Sie einfach Ihren Dienst in eine Datei mit dem Namen my_service.service und kopieren Sie ihn dann in das entsprechende Verzeichnis mit cp my_service.service /lib/systemd/system/
.
Beginnen Sie Ihren Service: sudo systemctl start my_service.service
. Dadurch wird das Skript gestartet, dessen Ausführung Sie Ihrem Dienst befohlen haben. Der gleiche Befehl mit "stop" anstelle von "start" schaltet ihn aus.
Fügen Sie Ihren Service an den Start-up - Prozess: sudo systemctl enable my_service.service
. Um es zu entfernen, ersetzen Sie einfach "enable" mit "disable" im selben Befehl.
Und das ist es! Denken Sie daran, dass Ihr Skript automatisch mit Root-Berechtigungen ausgeführt wird, wie dies bei systemd-Diensten standardmäßig der Fall ist.
Mein einfaches Beispiel (vollständig)
Als Referenz ist hier ein einfacher systemd-Dienst, den ich habe und der einen einfachen Python-GUI-Server mit Dash startet:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Dieser Beispieldienst verwendet ein Python3-Skript, die Formel ist jedoch für ein Shell-Skript identisch.
Weitere Informationen finden Sie in diesem hervorragenden Lernprogramm von DigitalOcean und in diesem AskUbuntu-Thread mit einer hervorragenden Antwort, die mir geholfen hat, systemd zu lernen. Hoffe das hilft!