Revision [20740]
This is an old revision of DaemonEinrichtenDebian made by ToBo on 2015-02-18 22:23:32.
Daemon einrichten
Diese Anleitung zeigt die Schritte für die Einrichtung eines Daemons unter OsLinux Debian auf. Einen neuen Daemon unter Debian. In meinem Fall war es u.a. ein Backup-Skript, welches erkennt, wenn ein bestimmter USB-Stick eingesteckt wurde und daraufhin ohne weiteres Zutun ein Backup macht.
Das Skript soll natürlich im Hintergrund des Systems laufen. Also ein Fall für einen Linux-Daemon.
Die erste Voraussetzung ist, es existiert bereits ein Skript wie in dem nachfolgenden Beispiel, welches im Systemhintergrund als "Daemon" laufen soll. Dieses Skript muss eine Endlosschleife enthalten. Auf das Backup-Skript (usbautobackup.sh) wird ab jetzt nicht näher eingegangen. Anstelle des Backup-Skripts kann natürlich jeder belibige Code stehen.
/home/root/backup/usbautobackup.sh
#!/bin/sh
while [ 1 ]
do
# place your code here
done
while [ 1 ]
do
# place your code here
done
Als zweiten Schritt wird unter /etc/init.d/ ein Start-Skript erstellt, dass beim Wechsel von Runlevel zu Runlevel vom System aufgerufen wird.
/etc/init.d/bcc
#!/bin/sh
# Andreas Tobola, 2014
### BEGIN INIT INFO
# Provides: bcc
# Required-Start:
# Required-Stop:
# Default-Start: 2
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# The name of the deamon
# Blue Case Control
DAEMON=bcc
touch /var/lock/$DAEMON
# Carry out specific functions when asked to by the system
case "$1" in
start)
#/home/pi/system/speak `python /home/pi/ATmega16/systemVoltage.py`
start-stop-daemon --background --start --pidfile /var/run/$DAEMON.pid --make-pidfile -N -1 --exec /usr/bin/python /home/pi/sys
echo "Blue Cace control daemon started."
/home/pi/system/speak "blu kejs kontrollsystem gestartet." &
;;
stop)
start-stop-daemon --stop --pidfile /var/run/$DAEMON.pid
echo "Blue Case control daemon stoped."
python /home/pi/system/kbcc.py
echo "I2C-Devices reset and giving back control to ATmega."
/home/pi/system/speak "blu kejs kontrollsystem beendet." &
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: /etc/init.d/$DAEMON {start|stop}"
exit 1
;;
esac
exit 0
# Andreas Tobola, 2014
### BEGIN INIT INFO
# Provides: bcc
# Required-Start:
# Required-Stop:
# Default-Start: 2
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# The name of the deamon
# Blue Case Control
DAEMON=bcc
touch /var/lock/$DAEMON
# Carry out specific functions when asked to by the system
case "$1" in
start)
#/home/pi/system/speak `python /home/pi/ATmega16/systemVoltage.py`
start-stop-daemon --background --start --pidfile /var/run/$DAEMON.pid --make-pidfile -N -1 --exec /usr/bin/python /home/pi/sys
echo "Blue Cace control daemon started."
/home/pi/system/speak "blu kejs kontrollsystem gestartet." &
;;
stop)
start-stop-daemon --stop --pidfile /var/run/$DAEMON.pid
echo "Blue Case control daemon stoped."
python /home/pi/system/kbcc.py
echo "I2C-Devices reset and giving back control to ATmega."
/home/pi/system/speak "blu kejs kontrollsystem beendet." &
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: /etc/init.d/$DAEMON {start|stop}"
exit 1
;;
esac
exit 0
Geeignete Rechte setzen
chmod 755 /etc/init.d/autobackup
Der nachfolgende Test sollte ergeben:
# /etc/init.d/autobackup start USB bar auto backup daemon started. # /etc/init.d/autobackup stop USB bar auto backup daemon stoped.
Damit das System den Daemon automatisch beim Wechsel der Runlevel startet bzw. stopt, muss dieses zumindest unter dem aktuellen Runlevel verlinkt werden. Mit dem Befehl runlevel, lässt sich herausfinden in welchem Runlevel das System im Normalfall arbeitet. Für Runlevel 2 wechselt man in das Verzeichnis /etc/rc2.d/. Für Runlevel 3 entsprechend /etc/rc3.d/. Die Nummer 80 im Beispiel gibt an, in welcher Reihenfolge die Skripte gestartet werden. In dem fall an stelle 82. Dazu schaut man sich in /etc/rc2.d/ was dort nach einander gestartet wird und wählt dann eine entsprechende Nummer, damit schon das Grundsystem verfügbar ist, wenn das eigene Skript gestartet wird. Wenn man die symbolischn Links unter /etc/rc2.d/ zu kryptisch empfindet, so wählt man eine recht hohe Nummer, notfalls 99. Nummer dürfen mehrfach vergeben werden. Man erstellt eine Datei mit S für Start (Starten beim Eintritt in den Runlevel) und eine Datei mit K für Kill (beim Verlassen des Runlevels beenden).
cd /etc/rc2.d/
ln -s /etc/init.d/autobackup S82autobackup
ln -s /etc/init.d/autobackup K82autobackup
ln -s /etc/init.d/autobackup S82autobackup
ln -s /etc/init.d/autobackup K82autobackup
Alternativ können unter Debian die üblichen symbolischen Links wie folgt automatisch erstellt werden, allerdings rate ich davon ab.
update-rc.d autobackup defaults
Und wenn die Links wieder weg sollen, dann gib man dem Computer das folgende Kommando:
update-rc.d -f autobackup remove
Siehe auch