Personal tools

Daemonise.pl

From OrganicDesign Wiki

Jump to: navigation, search
# 
# Install/remove should use update-rc.d
# - see http://newbiedoc.berlios.de/wiki/Runlevels_introduction
# - Actually best to leave as is because redhat uses chkconfig not update-rc.d
#   but the current peer way is working for both
 
# Install the service into init.d and rc2-5.d
if ( exists $config{ install } ) {
	# todo: check if peer of this name/port not already running
	my $fn = "$::daemon-".lc $::peer;
	writeFile my $target = "/etc/init.d/$fn.sh",
		"#!/bin/sh\n/usr/bin/perl $::dir/$::daemon $::peer --start --dir=$::dir/\n";
	symlink $target, "/etc/rc$_.d/S99$fn" for 2..5;
	chmod 0755, "/etc/init.d/$fn.sh";
	logAdd "$fn.sh added to /etc/init.d";
	}
 
# 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/S99$fn" for 2..5;
	unlink "/etc/init.d/$fn.sh";
	logAdd "$fn.sh removed from /etc/init.d";
	}
 
# Start as a daemon
# - see http://www.webreference.com/perl/tutorial/9 for help on daemons in PERL
if ( exists $config{ start } ) {
	# todo: check if peer of this name/port not already running
	logAdd "Starting $::daemon::$::peer";
	open STDIN, '/dev/null';
	open STDOUT, ">>../$::peer.log";
	open STDERR, ">>../$::peer.log";
	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;
	}
 
else { exit }

The GNU Project Debian Linux Ubuntu Linux Wikipedia online encycopedia MediaWiki