Estoy usando el siguiente comando para ejecutar un script de Python en segundo plano:
nohup ./cmd.py > cmd.log &
Pero parece que nohup no está escribiendo nada en el archivo de registro. cmd.log se crea pero siempre está vacío. En el script de Python, estoy usando en sys.stdout.writelugar de printimprimir en la salida estándar. ¿Estoy haciendo algo mal?

nohupestás usando? La versión BSD escribe en un archivo llamadonohup.outen el directorio actual (o$HOME/nohup.outsi el directorio actual no se puede escribir). No veo una manera de cambiar el nombre del archivo de salida ...Respuestas:
Parece que necesita enjuagar stdout periódicamente (por ejemplo
sys.stdout.flush()). En mis pruebas, Python no hace esto automáticamente inclusoprinthasta que se cierra el programa.fuente
python -uno funciona;nohuppodría haber introducido su propio almacenamiento en búfer.nohupno amortigua la salida ypython -ufunciona bien. (solo una actualización para personas)nohupes una utilidad POSIX, podría haber diferentes implementaciones en diferentes plataformas. Por cierto, python3 I / O ya no está basado en C stdio, pero tiene un comportamiento de almacenamiento en búfer similar.Puede ejecutar Python con el
-uindicador para evitar el almacenamiento en búfer de salida:fuente
Usando
-uconnohuptrabajado para mí. Usando-uobligará alstdout,stderrarroyos ser sin búfer. No afectará a stdin. Todo se guardará en el archivo " nohup.out ". Me gusta esto-También puede guardarlo en su directorio. De esta manera-
Además, puedes usar
PYTHONUNBUFFERED. Si lo configura en una cadena no vacía, funcionará igual que la-uopción. Para usar esto, ejecute los siguientes comandos antes de ejecutar el código python.o
PD : sugeriré usar herramientas como cron-job para ejecutar cosas en segundo plano y la ejecución programada.
fuente
o
https://docs.python.org/2/using/cmdline.html#cmdoption-u
fuente
Python 3.3 y superior tiene un argumento de descarga para imprimir y este es el único método que funcionó para mí.
fuente
Tuve un problema similar, pero no estaba conectado con un proceso de Python. Estaba ejecutando un script que hacía un nohup y el script se ejecutaba periódicamente a través de cron.
Pude resolver el problema:
PD: mis scripts fueron escritos en ksh ejecutándose en RHEL
fuente