Sie können zu /etc/init.d/ gehen – dort sehen Sie ein Daemon-Template namens skeleton.
Sie können es duplizieren und dann Ihr Skript unter der Startfunktion eingeben.
Ein Daemon ist einfach ein Programm, das als Hintergrundprozess läuft, anstatt unter der direkten Kontrolle eines interaktiven Benutzers zu stehen...
[Der folgende Bash-Code ist für Debian-Systeme – Ubuntu, Linux Mint-Distributionen usw.]
Der einfache Weg:
Der einfache Weg wäre, Ihre Datei /etc/rc.local zu bearbeiten und dann Ihr Skript einfach von dort aus auszuführen (d. h. jedes Mal, wenn Sie das System hochfahren):
sudo nano /etc/rc.local
Fügen Sie Folgendes hinzu und speichern Sie:
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
Der bessere Weg, dies zu tun, wäre, einen Daemon über Upstart zu erstellen:
sudo nano /etc/init/TheNameOfYourDaemon.conf
Folgendes hinzufügen:
description "My Daemon Job"
author "Your Name"
start on runlevel [2345]
pre-start script
echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script
exec /bin/sh TheNameOfYourScript.sh > /dev/null &
Speichern.
Bestätigen Sie, dass alles in Ordnung aussieht:
init-checkconf /etc/init/TheNameOfYourDaemon.conf
Starten Sie nun die Maschine neu:
sudo reboot
Wenn Sie jetzt Ihr System hochfahren, können Sie die Protokolldatei sehen, die besagt, dass Ihr Daemon läuft:
cat /var/log/TheNameOfYourDaemonJobLog.log
• Jetzt können Sie Ihren Daemon starten/stoppen/neu starten/den Status abrufen über:
Neustart:Dies wird stoppen und dann einen Dienst starten
sudo service TheNameOfYourDaemonrestart restart
start:Dies startet einen Dienst, falls er nicht läuft
sudo service TheNameOfYourDaemonstart start
stop:Dies stoppt einen Dienst, falls er läuft
sudo service TheNameOfYourDaemonstop stop
Status:Dies zeigt den Status eines Dienstes an
sudo service TheNameOfYourDaemonstatus status
Um es als vollständigen Daemon von einer Shell auszuführen, müssen Sie setsid
verwenden und seine Ausgabe umleiten. Sie können die Ausgabe in eine Protokolldatei oder an /dev/null
umleiten es zu verwerfen. Angenommen, Ihr Skript heißt myscript.sh, verwenden Sie den folgenden Befehl:
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
Dadurch wird der Prozess vollständig von Ihrer aktuellen Shell (stdin, stdout und stderr) getrennt. Wenn Sie die Ausgabe in einer Protokolldatei behalten möchten, ersetzen Sie die erste /dev/null
mit Ihrem /path/to/logfile.
Sie müssen die Ausgabe umleiten, sonst läuft sie nicht als echter Daemon (es hängt von Ihrer Shell ab, ob sie die Ausgabe liest und schreibt).