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


in reply to [Resolved] Perl watcher daemon

if (system(@args1) != 0) { logEntry ("No repeater.pl is running, attempting to re +start"); $repeater; }

I don't think that's doing what you think it does. As far as I can tell the bare $repeater doesn't do anything. You probably want something like

if (system(@args1) != 0) { logEntry ("No repeater.pl is running, attempting to re +start"); $repeater = Proc::Background->new('/etc/squid/repeater +/lib/repeater.pl'); }

Also, Proc::Background has functions for checking whether or not the process is still running, so you may want to use those instead of shelling out to pgrep:

if (!$repeater->alive()) { logEntry ("No repeater.pl is running, attempting to re +start"); $repeater = Proc::Background->new('/etc/squid/repeater +/lib/repeater.pl'); }

Of course that would not detect a process that was already started when your watcher begins. (But in that case you'd currently have 2 running processes anyway since you unconditionally start one with the initial Proc::Background->new call.)

Replies are listed 'Best First'.
Re^2: Perl watcher daemon
by kazak (Beadle) on Jan 18, 2012 at 23:11 UTC
    Thank you so much Crackers2 , now it works as a charm.