http://qs321.pair.com?node_id=105677


in reply to Perl daemons and /etc/init.d scripts

OK, this seems to work, setting --exec to the name of Perl, and --startas to the name of the script (one last try did it, apparently):

#! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/home/wander/wander/LCD/monitor.pl NAME=wanderLCD DESC="Wander LCD driver" test -f $DAEMON || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec /usr/bin/perl --startas $DAEMON echo "$NAME." ;; stop) echo -n "Stopping $DESC: " # --quiet start-stop-daemon --stop --signal 15 --pidfile /var/run/$NAME.pid \ --exec /usr/bin/perl --startas $DAEMON echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec /usr/bin/perl --startas $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec /usr/bin/perl --startas $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0

In the Perl script, I have something like:

BEGIN { # Fork. my $pidFile = '/var/run/wanderLCD.pid'; my $pid = fork; if ($pid) # parent: save PID { open PIDFILE, ">$pidFile" or die "can't open $pidFile: $!\n"; print PIDFILE $pid; close PIDFILE; exit 0; } }