Comment utiliser start-stop-daemon pour tuer un daemon Perl?
Bonjour,
J'ai installé le filtre AMaViS pour scanner les virus dans le courrier qui
passe par ma machine Debian 2.2. J'ai écrit un script /etc/init.d/antivirus
qui démarre amavisd, mais je voudrait le compléter pour être capable de
l'arrêter proprement avec une commande "antivirus stop" plutôt qu'un "kill
<amavis pid>".
Le programme amavisd est écrit en Perl, et il fait un fork rapidement pour
rendre la main à la console. Comment puis-je utiliser start-stop-daemon pour
lancer et arrêter ce programme puisqu'on ne connaît plus son PID? Ou bien,
comme je ne suis pas un dieu en Perl, quelqu'un peut-il m'aider à modifier
le source Perl pour conserver le PID du daemon dans un fichier
"/var/run/amavis.pid" et d'être capable de le tuer ultérieurement?
Extraits du source amavisd dont je cause:
... Initialisations sautées...
# detach thyself from the controlling terminal
if ($DEBUG eq "no") {
my $pid = fork;
exit if $pid;
die "Couldn't fork: $!" unless defined($pid);
setsid();
chdir("/");
close(STDIN);
close(STDOUT);
close(STDERR);
}
# PME 011115
# Store the PID to be able to kill the AMaViS server
if ($$ != 0) {
do_storepid($PIDFILENAME, $$);
}
# also need to set up HUP handler to re-read
read_config();
Après différentes fonctions pour attraper certains signaux, il y a une
grande boucle pour écouter sur un socket et faire des forks d'enfants qui
vont scanner avec l'antivirus chaque e-mail reçu.
J'ai essayé d'attraper le PID du premier enfant (puisque le père se suicide)
et de le conserver dans un fichier avec la fonction do_storepid(), mais je
ne sais pas comment faire.
Merci
Pierre Métras
Reply to: