run - python background process
Nohup no está escribiendo log en el archivo de salida (6)
Estoy usando el siguiente comando para ejecutar una secuencia de comandos python en segundo plano:
nohup ./cmd.py > cmd.log &
Pero parece que nohup no está escribiendo nada en el archivo de registro. Se crea cmd.log pero siempre está vacío. En el script de python, estoy usando sys.stdout.write
lugar de print
para imprimir a la salida estándar. ¿Estoy haciendo algo mal?
Parece que necesita eliminar el estándar de forma periódica (por ejemplo, sys.stdout.flush()
). En mi prueba, Python no hace esto automáticamente incluso con la print
hasta que el programa finaliza.
Puede ejecutar Python con el -u
para evitar el almacenamiento en búfer de salida:
nohup python -u ./cmd.py > cmd.log &
Python 3.3 y superior tiene un argumento de descarga para imprimir y este es el único método que funcionó para mí.
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
Tuve un problema similar, pero no relacionado con un proceso de Python. Estaba ejecutando un script que hizo un nohup y el script se ejecutó periódicamente a través de cron.
Pude resolver el problema de la siguiente manera:
- redireccionando el stdin, stdout y stderr
- asegurándose de que la secuencia de comandos que se invoca a través de nohup no ejecutaba nada más en el fondo
PD: mis guiones fueron escritos en ksh corriendo en RHEL
Usar '' -u '' con '' nohup '' funcionó para mí. Todo se guardará en el archivo " nohup.out ". Me gusta esto-
nohup python -u code.py &
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
o
nohup python -u ./cmd.py > cmd.log &