Shell: Daemonize Script mit supervisord

Um ein Script im Hintergrund laufen zu lassen kann launchtool, upstart oder start-stop-daemon verwendet werden.
Ein einfacher Weg ist aber die Verwendung von supervisord (einem Python-Paket). Nach der Installation mit

sudo apt-get install supervisor

muss die Konfigurationsdatei (Ubuntu: /etc/supervisor/supervisord.conf) angepasst werden.
Dazu muss wenigstens ein Programm hinzugefügt werden, damit sich supervisord darum kümmern kann.

[program:myscript]
command=python /home/myuser/script.py
numprocs=1
autostart=true
autorestart=true
user=myuser

Hier ein Beispiel:

  • Python-Interpreter mit script.py aufrufen
  • Genau eine Instanz erlauben
  • Beim Hochfahren des Rechners starten
  • script.py restarten, wenn das Script nicht mehr läuft
  • Als User „myuser“ laufen lassen

Die ganze Palette der Parameter ist unter supervisord.org einsehbar.
Nach der Konfiguration muss der Daemon gestartet werden:

sudo supervisor -c /etc/supervisor/supervisord.conf

Die Angabe der Konfigurationsdatei stellt sicher, dass die richtige Konfig-Datei genommen wird. Wird supervisord in einem „fremdem“ Ordner gestartet, könnte es eine schadhafte Konfig-Datei (./supervisord.conf) laden. Zudem gibt es einen Warnhinweis, wenn supervisord ohne Konfigurationsdatei gestartet wird.

Wurden Änderungen an der Konfig vorgenommen, müsse diese dem System mitgeteilt werden:

supervisorctl update

Danach kann mit

supervisorctl avail

Eine Liste der verfügbaren Programme eingesehen werden (in unserem Fall nur „myscript“). Gestarted wird mit

supervisorctl start myscript

Um den Status zu sehen

supervisorctl status

Stoppen des Daemons mit

supervisorctl stop myscript

Um alle Porgramm zu stoppen

supervisorctl stop all

Der Aufruf von supervisorctl ohne Parameter öffnet die supervisor-Shell, die mit „quit“ verlassen werden kann.