Redirecionar nohup para stdout

14

É 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 fosse exibido na tela, nohup é apenas um hedge quando a conexão é interrompida.

Davoud Taghawi-Nejad
fonte
Mas o que acontece quando o seu programa sai após a interrupção da conexão?
womble

Respostas:

4
  1. nohup python start.py & tail -f nohup.out O tail -fpode ser morto e reiniciado à vontade.

  2. screen python start.py e desconectar / reconectar à vontade.

Henk Langeveld
fonte
10

De man nohup:

Se a entrada padrão for um terminal, redirecione-o de / dev / null. Se a saída padrão for um terminal, acrescente a saída, nohup.out se possível, $HOME/nohup.outcaso contrário. Se o erro padrão for um terminal, redirecione-o para a saída padrão. Para salvar a saída em 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 ao SIGHUP (hangup, o nome se origina do momento em que os terminais discariam no computador UNIX) para informar que o terminal não está funcionando. mais conectado. Além disso, quando o processo do shell terminar, os fluxos stdin, stdout e stderr do processo filho serão fechados. Normalmente, isso faz com que o processo filho morra. Normalmente, isso é uma coisa boa, pois evita deixar processos em execução sem usuário.

O objetivo do nohupprograma é manter o processo em execução, mesmo após o shell terminar e o terminal desconectar. Como tal, direcionar sua saída para o terminal anula completamente o objetivo. Minha resposta original ( nohup COMMAND | cat) não foi útil porque: quando o terminal está fechado, a saída do gato é fechada e o gato morre, quebrando o tubo e enviando um SIGPIPE ao processo de nohup, causando a sua morte. Eu respondi a pergunta sem pensar no propósito.

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

Da mesma forma, pode-se usar a seguinte construção de shell: COMMAND >FILE 2>&1 </dev/null &para executar um comando cujos fluxos stdio não estão conectados ao terminal e podem continuar em execução após o fechamento do terminal. Além disso, no zsh, execute o shell-builtin disownpara dizer ao zsh para deixar o processo em vez de matá-lo quando o shell terminar.

dsh
fonte
1
Uma boa adição: se o comando nohup já foi iniciado com um nome de arquivo, você pode usar tail -f filenamepara ver o que está gravado no arquivo.
Hennes
Não funciona, uma vez que a conexão pára o arquivo não é mais escrito
Davoud Taghawi-Nejad
Você está certo: eu respondi à pergunta (envie a saída para o terminal), mas derrotei o objetivo. Reescrevi minha resposta de acordo.
Dsh
-1
vladimir@lin-mint-cin:~$ tty<br>
/dev/pts/8<br>
vladimir@lin-mint-cin:~$ ln -sf /dev/pts/8 nohup.out<br>
vladimir@lin-mint-cin:~$ nohup ls<br>
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'<br>
2019-05-31-090159.jpg    giphy.gif        nim_porojects   sketchbook
Aptana_Studio_Workspace  IdeaProjects         nohup.out       target
Desktop          jack_capture_01.wav  Pictures        Templates
Documents        lib              Postman         tmp
Downloads        mad              Projects        trace.edn
eclipse          Mail             prolog_ws       uinfild_hill-iskusstvo_shemotehniki_tom_1_izd4-e-1489315100.pdf
eclipse-dsl-workspace    Music            proxy-secret    Videos
eclipse-workspace    mygolo           Public          workspace-dltk
erlang_ex        my_golo_ws       rust-workspace  проекты
Vladimir Gamaley
fonte