Redirecionar nohup para stdout

12

É possível deixar um processo iniciado com nohup, gravar em stdout em vez de em um arquivo? ou talvez no arquivo e na tela?

nohup python start.py &

escreve para nohup.out , mas eu gostaria que saísse para a tela, nohup serve apenas como um hedge quando a conexão quebra.

    
por Davoud Taghawi-Nejad 05.08.2012 / 00:00

2 respostas

10

De man nohup :

If standard input is a terminal, redirect it from /dev/null. If standard output is a terminal, append output to nohup.out if possible, $HOME/nohup.out otherwise. If standard error is a terminal, redirect it to standard output. To save output to FILE, use nohup COMMAND > FILE.

(completamente revisado com base nos comentários)
Ao sair de um shell ou fechar um terminal, os processos-filhos serão enviados SIGHUP (hangup, o nome origina-se do momento em que os terminais discam para o computador UNIX) para informar que o terminal não está mais conectado. Além disso, quando o processo de shell termina, os fluxos stdin, stdout e stderr do processo filho serão fechados. Geralmente isso faz com que o processo da criança morra. Geralmente isso é bom porque evita que processos sejam executados sem usuário.

A finalidade do programa nohup é manter o processo em execução mesmo depois que o shell termina e o terminal se desconecta. Como tal, direcionar sua saída para o terminal derrota completamente o propósito. Minha resposta original ( nohup COMMAND | cat ) não foi útil porque: quando o terminal está fechado, a saída do gato é fechada e assim o gato morre, o que quebra o tubo e envia um SIGPIPE para o processo nohup fazendo com que ele morra. Eu havia respondido a pergunta sem pensar no propósito.

Para atingir seu objetivo, execute nohup COMMAND > FILE para selecionar o nome do arquivo para direcionar a saída. Em seguida, use tail -f FILE para assistir a saída em um terminal.

Da mesma forma, pode-se usar a seguinte construção shell: COMMAND >FILE 2>&1 </dev/null & para executar um comando cujos fluxos stdio não estejam conectados ao terminal e possam continuar em execução após o terminal ser fechado. Além disso, em zsh, execute o disown embutido no shell para informar ao zsh para deixar o processo em vez de eliminá-lo quando o shell terminar.

    
por 05.08.2012 / 00:07
3
  1. nohup python start.py & tail -f nohup.out O tail -f pode ser eliminado e reiniciado à vontade.

  2. screen python start.py e desconexão / reconectada à vontade.

por 05.08.2012 / 02:21

Tags