Wie kann ich ein Skript beim Start auf Ubuntu Server 17.10 ausführen?

13

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.

Rodolfho
quelle

Antworten:

14

Fügen Sie das Skript in die entsprechende Benutzertabelle cron(z. B. die crontab ) mit einem Zeitplan von ein @reboot.

Ein Benutzer kann seine cronTabelle mit bearbeiten crontab -e.

Ein Beispiel, das /path/to/script.shbeim 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 rootdiese Option, um die Crontab von Root zu bearbeiten.

Siehe auch: crontab (1), cron (8), crontab (8)

DopeGhoti
quelle
2

Ab Ubuntu 15.04 wird standardmäßig ein sogenanntes systemdProgramm 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- .serviceDatei, 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 DescriptionOption ist eine beliebige Zeichenfolge, die beschreibt, was der Dienst ist oder tut.

Die ExecStartOption 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 WantedByOption 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

  1. Schreiben Sie das Skript, das Sie beim Start ausführen möchten, mit nanoeinem Editor Ihrer Wahl. Stellen Sie sicher, dass Sie den richtigen Shebang ganz oben in die Datei #!/bin/basheinfügen ( für Bash-Skripte), und geben Sie ihr ausführbare Berechtigungen mit chmod.

  2. 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/.

  3. 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.

  4. 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!

Tyrel Kostyk
quelle
2
Vielen Dank, dass Sie diese Frage aus der Systemperspektive beantworten! Ich möchte darauf hinweisen, dass in der ExecStart-Zeile kein Hintergrund erzwungen werden muss.
Jeff Schaller