Los fondos & bien, a excepción de los programas que regresan que requieren interacción con la consola más tarde (por ejemplo, una "apt -y update &" que eventualmente ingresa al estado STOP ya que quiere preguntarle al usuario una pregunta "¿realmente realmente forzar?" Mucho más tarde .... cuando ya nadie está mirando).
Para tapar ese agujero e informar el proceso, un terminal realmente nunca estará disponible para él, agrego un <& - a algunos de mis comandos, separándolos por completo del terminal activo diciéndoles que STDIN ya no es posible. Asegúrese de que / bin / bash es su shell si lo usa. El script continuará registrando cualquier error relacionado con la ausencia de pseudoterminal disponible para emitir cualquier aviso.
Por ejemplo:
`./runme.sh &> runme.log <&- & disown`
es mi mejor manera de desvincularse de la sesión actual de terminal. Tanto STDOUT como STDERR se registran en runme.log, no importará si su consola o shell finalizan antes o si cierra sesión / su en una cuenta diferente (no hay basura en la terminal de runme), y gracias a repudiar incluso al padre-hijo La relación PID se elimina.
ACTUALIZACIÓN: incluso con eso he tenido problemas con un semáforo que lo asocia con el nombre del padre original, así que ahora recomiendo en su lugar:
at now <<< "(cmd1; cmd2; etc.) &> logfile.log"
Por supuesto, elimine &> si desea que se le envíe por correo electrónico la salida de CRON, o redirija todo a / dev / null en lugar de un archivo.
screen
) puede, entre otras cosas, usarse para "envolver" procesos de ejecución más larga. Puede desconectarse de él, volver al shell, luego volver a conectar y ver la salida del proceso en ejecución. La reconexión incluso se puede hacer desde otro terminal, SSH, etc. También puede haber otros programas que le permitan hacer este tipo de cosas.