[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: