ich habe einen Perl daemon programmiert, der über ein init-d-script gestartet und beendet werden soll. Der Start funktioniert. Der Daemon läuft in einer Schleife. Wenn ich dann stop aufrufe, erhalte ich zwar die Meldung, dass der Daemon beendet wurde, jedoch läuft der Daemon weiter in der Schleife, weil die Bedingung für die Schleife immer noch wahr ist. Der Daemon wird erst beendet, wenn ich mir die Prozess-ID heraussuche und kill <process-id> aufrufe. Die Schleifenbedinung wird dann unwahr ($continue = 0). Das Skript verwendet Proc::Daemon, was ja die einfachste Variante sein soll.
Code: Alles auswählen
#!/usr/bin/perl -w
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
#do stuff
}
Code: Alles auswählen
#!/lib/init/init-d-script
### BEGIN INIT INFO
# Provides: open door
# Required-Start: $syslog $time $remote_fs
# Required-Stop: $syslog $time $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: My open door
# Description: blabla
### END INIT INFO
DESC="OpenIP"
DAEMON=/usr/sbin/openip
NAME="openip"
PIDFILE="/var/run/$NAME/$NAME.pid"
. /etc/iptables-openip
do_start_prepare()
{
call setFirewallRules
}
do_stop_cleanup()
{
call deleteFirewallRules
}
Code: Alles auswählen
Aug 10 21:18:53 mu2 systemd[1]: Starting LSB: Example initscript...
Aug 10 21:18:53 mu2 systemd[1]: Started LSB: Example initscript.
Aug 10 21:18:57 mu2 systemd[1]: Stopping LSB: Example initscript...
Aug 10 21:18:57 mu2 systemd[1]: openip.service: Succeeded.
Aug 10 21:18:57 mu2 systemd[1]: Stopped LSB: Example initscript.