Tout d'abord, vous avez besoin d'un point-virgule pour mettre fin à l'affectation en ligne 9:
$SIG{TERM} = sub { $continue = 0 ; };
Jusqu'à ce que j'ajouté que, votre programme ne fonctionnerait pas même, donc je devine que vous avez dans la script et l'a manqué ici. Au-delà de cela, je soupçonne que Guss a raison, et vous avez des problèmes de permission. Voici un moyen de vérifier. Ouvrez un terminal distinct et exécutez top
. Démarrez le script du démon, et vous verrez un processus Perl apparaître. Si le problème est des autorisations, vous verrez rapidement le processus Perl disparaître. Le script meurt dans le sous-programme, mais votre tentative de message d'erreur utile ne s'affiche jamais car le démon n'a pas accès à votre terminal à ce stade.
Un moyen rapide de faire varier ce test est de changer die
à warn
dans le sous-programme. Si vous le faites, le démon continuera à fonctionner pour toujours (vérifiez le terminal qui exécute top
pour le confirmer). Mais si le problème est des autorisations, vous toujours ne verront pas un fichier être créé ou écrit. Edit: Yup, problème de permissions + pas d'accès à STDERR = démon silencieux et silencieux. Essayez cette version, mais assurez-vous que vous pouvez écrire dans le journal que vous passez en pour STDERR:
Proc::Daemon::Init();
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 ; };
while ($continue) {
sleep(5);
greeting();
}
sub greeting {
open STDERR, '>>', '/Users/telemachus/log'
or die "Can't reopen STDERR to log: $!";
open my $fh, '>>', '/usr/local/foo'
or warn "Can't open /usr/local/foo for writing: $!";
print $fh "hello word\n";
close $fh;
}
Vous êtes susceptible de voir beaucoup de cela dans votre journal:
Can « t ouvert foo pour l'écriture: Permission refusée à la ligne démon 21. impression() dESCRIPTEUR fermé fh $ à la ligne démon 22.
Apparemment $ continuer passe à 0 quelque temps avant de vous réveiller de « sommeil 5 ». Un certain débogage de base vous aiderait probablement à comprendre ce qui se passe et aurait probablement pris moins de temps que de copier-coller sur un site Web. – jrockway
Je pense que vous voulez un point-virgule à la fin de la ligne 9: '$ SIG {TERM} = sub {$ continue = 0; }; 'C'est peut-être une faute de frappe ici, et je ne pense pas que ce soit le problème racine. – Telemachus
utilise la forme à trois arguments de 'open()'. –