2011-07-03 1 views
0

Je sais comment tuyau à un script perl juste exécuter quelque chose comme ceci:tuyau Howto pour perl un démon dans l'exécution

command | script.pl 

A l'intérieur du script.pl je me suis le:

while(<STDIN>){... 

et ainsi de suite, mais j'ai diabolisé le script et je veux savoir comment puis-je envoyer une commande au script tout en fonctionnant comme un démon.

Une suggestion?

Merci

Répondre

0

STDIN doit être fermé sur démonisation pour des raisons de sécurité.

Vous devez créer un socket (ou peut-être un fifo) et lire à partir de cela. Je suggère Unix domain sockets, voir le chapitre 17.6 du Perl Cookbook.

Il est difficile d'être plus précis d'ici, car cela dépend de ce que fait votre démon.


Mise à jour:

En fait, maintenant que j'y pense, si le programme est exécuté sur une boîte Unix ou Linux, vous pouvez garder votre script tel qu'il est et utilisez inetd à la place. Inetd va écouter une socket pour vous et démarrer votre démon sur la connexion, pont entre le socket et STDIN/STDOUT sur votre programme. Je n'ai aucune expérience avec l'utilisation d'inetd avec les sockets de domaine, mais un googling superficiel indique qu'au moins certaines implémentations prennent en charge les sockets de domaine.

+1

La fermeture de stdin n'est pas liée à la sécurité mais à la dissociation complète du démon de l'environnement dans lequel il a été lancé. – salva

+0

@salva: OP dispose d'un programme qui peut interagir avec l'utilisateur via stdin et peut également servir de démon. Je pose que ce programme devrait s'assurer qu'il ne peut pas être "atteint" via stdin lorsqu'il est démonisé. Pour moi, c'est une précaution de sécurité. La plupart des démons n'ont pas cette dualité mais devraient quand même fermer stdin pour se désolidariser du terminal afin de ne pas l'empêcher d'être recyclé. – Bittrance