[pyar] Mejor forma de generar pid files?

QliX=D! [aka EHB] qlixed en gmail.com
Lun Dic 13 11:55:38 ART 2010


Popen con ps pueden hacer que tu script no sea multiplataforma.
No se si es muy importante en tu caso, pero bueno :)

Yo usaria tempfile.NamedTemporaryFile para crear el archivo pidfile y antes
bloquearia las señales de interrupcion mas comunes hasta que se crea el
pidfile.Algo asi:

import signal
import tempfile
import os

#Ignorar señales comunes de interrupcion hasta que este listo el pidfile
for x in [signal.SIGABRT, signal.SIGBREAK, signal.SIGTERM, signal.SIGINT]
  signal.signal(x, signal.SIG_IGN)

fdt=tempfile.NamedTemporaryFile(mode='wb', delete=False, dir="./",
suffix='.pid', preffix="myscriptname_")
fdt.write(str(os.getpid()))
fdt.close()

#Restaurar señales
for x in [signal.SIGABRT, signal.SIGBREAK, signal.SIGTERM, signal.SIGINT]
  signal.signal(x, signal.SIG_DFL)

Luego deberias buscar archivos llamados: myscriptname_*.pid para ver si te
quedo colgado algun archivo y luego con psutil ver el listado de procesos.

Saludos.
QliXed


2010/12/13 Eka (Esteban Feldman) <ekagaurangadas en gmail.com>

> 2010/12/13 Andrés Gattinoni <andresgattinoni en gmail.com>
>
> 2010/12/13 Eka (Esteban Feldman) <ekagaurangadas en gmail.com>:
>> > Gente, en estos momentos hago lo siguiente
>> >
>> > open(pid_file, 'w').write(str(os.getpid()))
>> > ...
>> > os.unlink(pid_file)
>> >
>> > hay alguna forma mejor de hacer esto? la otra es que pasaria si rompese
>> > antes de borrar el pid file.
>> >
>>
>> Googleando encontré esto [0]. Hace lo mismo que vos. Pero le agrega
>> una cosa interesante que al menos yo no conocía.
>>
>> import atexit
>>
>> [...]
>> atexit.register(self.delpid)
>> [...]
>> def delpid(self):
>>                os.remove(self.pidfile)
>>
>> [0]
>> http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>
> Andres: de la docu: Note: the functions registered via this module are not
> called when the program is killed by a signal not handled by Python, when a
> Python fatal internal error is detected, or when os._exit()<http://docs.python.org/library/os.html#os._exit>is called.
>
> Mi idea es, cuando se ejecuta de nuevo el programa, ver si existe el
> archivo, leer el pid y ver si realmente esta corriendo, dado que pudo no
> haber borrado el pid file.
>
> Eso parece bien? Uso Popen con ps?
>
>
> --
> Chant Hare Krishna and Be Happy
>
> Eka
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101213/529fcc24/attachment.html>


More information about the pyar mailing list