Difference between revisions of "Daemonise.pl"
(Updated - uses GetOpt::Long) |
(Begin auto-install/remove functions (using rc[2-5].d)) |
||
| Line 1: | Line 1: | ||
| − | + | # Install the service | |
| + | # - install a shell cmd into init.d and links to it in rc[2-5].d | ||
| + | if ( exists $config{ install } ) { | ||
| + | my $icmd = $cmd; | ||
| + | my $fn = "$daemon-".lc $peer; | ||
| + | $icmd =~ s/install/start/; | ||
| + | writeFile $target = "/etc/init.d/$fn.sh", "#!/bin/sh\n$icmd\n"; | ||
| + | symlink $target, "/etc/rc$_.d/S09$fn" for 2..5; | ||
| + | } | ||
| − | # | + | # Remove the named service and exit |
| − | + | # - remove shell script from init.d and links from rc[2-5].d | |
| − | + | if ( exists $config{ remove } ) { | |
| − | + | my $fn = "$daemon-".lc $peer; | |
| − | + | unlink "/etc/rc$_.d/S09$fn" for 2..5; | |
| − | + | unlink "/etc/init.d/$fn.sh"; | |
| − | + | } | |
| − | |||
| − | # | + | # Start as a daemon |
| − | if ( exists $config{ start } ) { | + | # - see http://www.webreference.com/perl/tutorial/9 for help on daemons in PERL |
| − | logAdd "Starting | + | if ( exists $config{ install } or exists $config{ start } ) { |
| − | + | logAdd "Starting $daemon::$peer"; | |
| − | + | open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; | |
| − | + | open STDOUT, ">>$peer.log" or die "Can't write to /dev/null: $!"; | |
| − | + | open STDERR, ">>$peer.log" or die "Can't write to /dev/null: $!"; | |
| − | + | defined ( my $pid = fork ) or die "Can't fork: $!"; | |
| − | + | exit if $pid; | |
| − | + | setsid or die "Can't start a new session: $!"; | |
| − | + | umask 0; | |
| − | |||
} | } | ||
elsif ( exists $config{ stop } ) { | elsif ( exists $config{ stop } ) { | ||
| − | logAdd "Stopping | + | logAdd "Stopping $daemon::$peer..."; |
# chk if any in localPeers on $port, error if not | # chk if any in localPeers on $port, error if not | ||
| Line 39: | Line 45: | ||
} | } | ||
| − | + | elsif ( exists $config{ restart } ) { | |
# Signal the named peer to restart | # Signal the named peer to restart | ||
exit; | exit; | ||
Revision as of 03:01, 14 December 2005
- Install the service
- - install a shell cmd into init.d and links to it in rc[2-5].d
if ( exists $config{ install } ) { my $icmd = $cmd; my $fn = "$daemon-".lc $peer; $icmd =~ s/install/start/; writeFile $target = "/etc/init.d/$fn.sh", "#!/bin/sh\n$icmd\n"; symlink $target, "/etc/rc$_.d/S09$fn" for 2..5; }
- Remove the named service and exit
- - remove shell script from init.d and links from rc[2-5].d
if ( exists $config{ remove } ) { my $fn = "$daemon-".lc $peer; unlink "/etc/rc$_.d/S09$fn" for 2..5; unlink "/etc/init.d/$fn.sh"; }
- Start as a daemon
- - see http://www.webreference.com/perl/tutorial/9 for help on daemons in PERL
if ( exists $config{ install } or exists $config{ start } ) { logAdd "Starting $daemon::$peer"; open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; open STDOUT, ">>$peer.log" or die "Can't write to /dev/null: $!"; open STDERR, ">>$peer.log" or die "Can't write to /dev/null: $!"; defined ( my $pid = fork ) or die "Can't fork: $!"; exit if $pid; setsid or die "Can't start a new session: $!"; umask 0; }
elsif ( exists $config{ stop } ) { logAdd "Stopping $daemon::$peer...";
# chk if any in localPeers on $port, error if not
# Remove the peer from inittab #qx( 'grep -e "^[^2][^P]" /etc/inittab > /etc/inittab.tmp' ); #qx( 'mv /etc/inittab.tmp /etc/inittab' );
# - send a stop to peer using IO::Socket # - poll/timeout peers file to see if it dies # - kill it by pid/sig if it won't die exit; }
elsif ( exists $config{ restart } ) { # Signal the named peer to restart exit; }
if ( exists $config{ status } ) { # - Get running peers/ports list # - also indicates how many children each parent has spawned #for (@peers) { # } exit; }



