2010-06-02 18 views
3

J'essaye de démoniser un exemple de processus perl à syslog.daemonize processus perl

1) dans le script perl déjà log dans le fichier rotate de journal, mais je voudrais vous connecter le daemonize pour le cas quand les choses tournent mal avant journal se créer 2) je suis actuellement en train de faire sudo/usr/sbin/daemonize -u Utilisateur -a -e /home/users/me/log/log.log/home/users/me/test

Cela fonctionne déjà, mais le problème est que le fichier journal devient grand et unique pour gérer le fichier journal est si daemonize est stop.

Je suis en train de se connecter à syslog alors je fais

sudo/usr/sbin/daemonize -u utilisateur -a -e/dev/stderr/home/users/Me/test | enregistreur

cela aura une erreur d'autorisation en écriture à stderr. Si je ne cours pas en tant qu'utilisateur, je reçois un bon journal, mais pour des raisons de sécurité, je dois exécuter mon démon en tant qu'utilisateur.

Je suis coincé toute aide est apprécier

mon test sous {principal my $ i = 0; pour ($ i = 0; $ i < 10; $ i ++) { imprime "ceci est un test". $ i. "\ n"; } }

principal (@ARG);

Je note aussi essayé le 2> & 1 mais ne fonctionne pas

+3

http://stackoverflow.com/questions/766397/how-can-i-run-a-perl-script-as-a-system-daemon-in-linux - et voilà –

+0

L'autre Je suppose que vous avez ici (bien que je ne sache pas exactement ce que fait/usr/sbin/daemonize), c'est que vous redirigez la sortie vers le logger en dehors de la démonisation. Je soupçonne qu'il peut fermer la sortie standard (une chose standard à faire lors de la démonisation), à quel point vous avez perdu le tuyau à l'enregistreur et l'enregistreur va juste quitter. – rra

+0

essayez [immortel] (https://immortal.run) 'immortal -l votre-commande' – nbari

Répondre

2

Vous pourriez faire mieux utiliser Daemon :: daemon de CPAN ou quelque chose comme ça. Il vous permet de rediriger automatiquement STDOUT et STDERR. Il prétend gérer tous les trucs de setpgrp dont vous avez besoin.

Je pense que si vous combinez cela en utilisant Sys :: Syslog (également de CPAN), vous pouvez faire tout ce que vous devez faire sans compter sur/usr/sbin/daemonize et avec un peu plus de contrôle sur ce qui est se passe réellement avec votre programme.

Vous semblez avoir deux problèmes distincts:

1) Daemonizing votre programme. 2) Connexion à syslog.

Les deux sont des problèmes qui sont mieux résolus directement dans votre code Perl. En plus de Daemon :: Daemonize, il y a Proc :: Daemonize. Je n'ai pas d'opinion sur leurs mérites relatifs, je viens d'utiliser Daemon :: Daemonize dans le passé. L'un ou l'autre ferait fonctionner votre programme en tant que démon.

Pour écrire à syslog, en utilisant Sys :: Sylog fera le levage de charges lourdes pour vous. Ce n'est pas une simple redirection, mais cela vous permettra d'envoyer des messages de log et de ne pas vous soucier de la rotation des logs.