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