Eigene systemd Services erstellen

Wer ein Script oder eine Anwendung dauerhaft laufen lassen will macht das am saubersten als systemd-Service.
Automatischer Start beim Booten, automatischer Neustart bei Absturz, Logs über journalctl — das bekommt man alles umsonst.

Service-Datei erstellen

sudo nano /etc/systemd/system/mein-dienst.service
[Unit]
Description=Mein eigener Dienst
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/meinprojekt
ExecStart=/usr/bin/php /var/www/meinprojekt/worker.php
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

After=network.target sorgt dafür dass der Dienst erst startet wenn das Netzwerk bereit ist.
Restart=on-failure startet den Prozess neu wenn er mit einem Fehler-Exit-Code beendet wird.
RestartSec=5 wartet 5 Sekunden vor dem Neustart.

Dienst aktivieren und starten

sudo systemctl daemon-reload
sudo systemctl enable mein-dienst
sudo systemctl start mein-dienst

enable sorgt dafür dass der Dienst beim nächsten Booten automatisch startet.

Status und Logs

sudo systemctl status mein-dienst
sudo journalctl -u mein-dienst -f

-f zeigt den Log live mit, wie tail -f.

Umgebungsvariablen übergeben

[Service]
EnvironmentFile=/etc/mein-dienst.env

In /etc/mein-dienst.env dann einfach SCHLUESSEL=wert Zeilen eintragen.
Die Datei mit chmod 600 schützen damit nicht jeder Benutzer reinschauen kann.