2013-07-28 10 views
3

Bonjour J'écris un démon en python qui utilise le module python-daemon, mon application démarre correctement, il y a un pidfile.lock créé mais aucun signe du fichier pid contenant l'identifiant du processus.Python daemon no pidfile

import daemon 
import lockfile 

import perfagentmain 

context = daemon.DaemonContext(
    working_directory='/opt/lib/perf-agent', 
    umask=0o002, 
    pidfile=lockfile.FileLock('/var/run/perf-agent.pid') 
    ) 


with context: 
    perfagentmain.start() 
+1

'pidfile = daemon.pidlockfile.PIDLockFile ("/var/run/zebra.pid ")' - a fonctionné pour moi. Voir http://stackoverflow.com/a/13082597/159149 – koddo

Répondre

3

Je suis d'accord avec le commentaire de @npoektop sur la solution. Je voudrais juste dire que daemon.pidlockfile n'existe pas au moment où j'écris ceci. daemon.pidfile à la place. Peut-être que c'est un changement de nom récent? Donc à la place, voici la solution générale utilisant le module daemon.pidfile au lieu du module lockfile.

import daemon 
import daemon.pidfile 
import perfagentmain 

context = daemon.DaemonContext(
    working_directory='/opt/lib/perf-agent', 
    umask=0o002, 
    pidfile=daemon.pidfile.PIDLockFile('/var/run/perf-agent.pid') 
    ) 

with context: 
    perfagentmain.start() 

Et @Martino Dino, vous avez tout à fait raison, il semble que le module de lockfile a une implémentation totalement différente de l'écriture de fichiers de verrouillage. (Même si python-daemon exige effectivement lockfile)

Lorsque j'ai essayé pidfile = lockfile.FileLock('/var/run/mydaemon.pid') pour mes propres besoins, j'ai vu à la place un fichier appelé <MY_MACHINE_NAME>-<8CHAR_HEX_ID>.<PID_OFF_BY_2>, avec un fichier /var/run/mydaemon.pid.lock. This answer mentionne que cette méthode de lier un fichier nommé aléatoirement à votre fichier pidlock était une méthode de verrouillage de fichier avant l'utilisation de l'indicateur O_EXCL utilisé lors de l'ouverture des fichiers.

Mais la partie ennuyeux était que le dossier ne contenait pas le PID comme vous avez dit, et le nom du fichier avait un PID qui était hors de quelques chiffres du corr, donc il était terriblement trompeur.