¿Es posible dejar que un proceso comience con nohup, escribir en stdout en lugar de en un archivo? o tal vez en el archivo y en la pantalla?
nohup python start.py &
escribe nohup.out
, pero me gustaría que salga a la pantalla, nohup solo se entiende como una cobertura cuando se corta la conexión.
Respuestas:
nohup python start.py & tail -f nohup.out
Setail -f
puede matar y reiniciar a voluntad.screen python start.py
y desconectar / reconectar a voluntad.fuente
De
man nohup
:(completamente revisado en función de los comentarios)
Al salir de un shell o cerrar un terminal, los procesos secundarios se enviarán SIGHUP (bloqueo, el nombre se origina desde el momento en que los terminales marcarían en la computadora UNIX) para decirles que el terminal no funciona Ya conectado. Además, cuando finaliza el proceso de shell, se cerrarán las secuencias stdin, stdout y stderr del proceso secundario. Por lo general, esto hace que el proceso del niño muera. Por lo general, esto es bueno porque evita que los procesos se ejecuten sin usuario.
El propósito del
nohup
programa es mantener el proceso en ejecución incluso después de que el shell finalice y el terminal se desconecte. Como tal, dirigir su salida al terminal anula completamente el propósito. Mi respuesta original (nohup COMMAND | cat
) no fue útil porque: cuando el terminal está cerrado, la salida de cat está cerrada y cat muere, lo que rompe la tubería y envía un SIGPIPE al proceso de nohup que lo hace morir. Había respondido la pregunta sin pensar en el propósito.Para lograr su propósito, ejecute
nohup COMMAND > FILE
para seleccionar el nombre del archivo para dirigir la salida. Luego, usetail -f FILE
para ver la salida en un terminal.De manera similar, se podría usar la siguiente construcción de shell:
COMMAND >FILE 2>&1 </dev/null &
para ejecutar un comando cuyas secuencias stdio no estén conectadas al terminal y puedan continuar ejecutándose después de que el terminal se cierre. Además, en zsh, ejecute el shell-builtindisown
para decirle a zsh que abandone el proceso en lugar de matarlo cuando finalice el shell.fuente
tail -f filename
para ver lo que está escrito en el archivo.fuente