Le plus simple est d'utiliser Proc::Daemon.
#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
#do stuff
}
Alternativement, vous pourriez faire toutes les choses Proc::Daemon n':
- La fourche d'un enfant et les sorties du processus parent.
- Devenir un leader de session (qui se détache le programme à partir du terminal de contrôle).
- Fourche à un autre enfant de processus et de sortie du premier enfant. Cela empêche le potentiel de l'acquisition d'un terminal de contrôle.
- Changer le répertoire de travail en cours d'
"/"
.
- Effacer le fichier de création de masque.
- Fermer tous les descripteurs de fichiers ouverts.
L'intégration avec le niveau d'exécution du système est facile. Vous avez besoin d'un script comme la suivante (remplacer XXXXXXXXXXXX
avec le script Perl nom, YYYYYYYYYYYYYYYYYYY
avec une description de ce qu'il fait, et /path/to
avec chemin d'accès au script Perl) en /etc/init.d
. Puisque vous êtes à l'aide de CentOS, une fois que vous avez le script en /etc/init.d
, vous pouvez simplement utiliser chkconfig pour l'activer ou de désactiver dans les différents niveaux d'exécution.
#!/bin/bash
#
# XXXXXXXXXXXX This starts and stops XXXXXXXXXXXX
#
# chkconfig: 2345 12 88
# description: XXXXXXXXXXXX is YYYYYYYYYYYYYYYYYYY
# processname: XXXXXXXXXXXX
# pidfile: /var/run/XXXXXXXXXXXX.pid
### BEGIN INIT INFO
# Provides: $XXXXXXXXXXXX
### END INIT INFO
# Source function library.
. /etc/init.d/functions
binary="/path/to/XXXXXXXXXXXX"
[ -x $binary ] || exit 0
RETVAL=0
start() {
echo -n "Starting XXXXXXXXXXXX: "
daemon $binary
RETVAL=$?
PID=$!
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/XXXXXXXXXXXX
echo $PID > /var/run/XXXXXXXXXXXX.pid
}
stop() {
echo -n "Shutting down XXXXXXXXXXXX: "
killproc XXXXXXXXXXXX
RETVAL=$?
echo
if [ $RETVAL -eq 0 ]; then
rm -f /var/lock/subsys/XXXXXXXXXXXX
rm -f /var/run/XXXXXXXXXXXX.pid
fi
}
restart() {
echo -n "Restarting XXXXXXXXXXXX: "
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status XXXXXXXXXXXX
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;;
esac
exit 0