将nohup重定向到stdout


14

是否可以让进程从nohup开始,写到stdout而不是文件中?还是在文件和屏幕上?

nohup python start.py &

写入nohup.out,但我希望将其输出到屏幕,nohup仅在连接断开时用作树篱。


但是,如果连接断开后程序输出,会发生什么?
womble

Answers:


4
  1. nohup python start.py & tail -f nohup.outtail -f会被杀死,随意重启。

  2. screen python start.py 并随意断开/重新连接。


10

来自man nohup

如果标准输入是终端,请从/ dev / null重定向它。如果标准输出是端子,nohup.out 则在可能的情况下附加输出 $HOME/nohup.out。如果标准错误是终端,请将其重定向到标准输出。要将输出保存到FILE,请使用 nohup COMMAND > FILE

(根据注释进行了完全修订)
退出外壳程序或关闭终端时,将向子进程发送SIGHUP(挂断,名称源自终端拨入UNIX计算机的时间),以告诉他们终端不是不再连接。此外,当shell进程结束时,子进程的stdin,stdout和stderr流将关闭。通常,这会导致子进程死亡。通常这是一件好事,因为它避免了让进程在没有用户的情况下运行。

nohup程序的目的是即使在Shell终止并且终端断开连接后,也可以保持进程运行。这样,将其输出定向到终端完全无法达到目的。我最初的答案(nohup COMMAND | cat)没有帮助,因为:当终端关闭时,cat的输出关闭,cat死了,这打破了管道,并向nohup进程发送了SIGPIPE导致它死了。我没有考虑目的就回答了这个问题。

为了实现您的目的,请运行nohup COMMAND > FILE选择要直接输出到的文件的名称。然后用于tail -f FILE观察终端上的输出。

同样,可以使用以下shell构造:COMMAND >FILE 2>&1 </dev/null &运行命令,其stdio流未连接到终端,并且可以在终端关闭后继续运行。此外,在zsh中,运行shell-builtin disown告诉zsh退出进程,而不是在shell结束时将其杀死。


1
一个不错的补充:如果nohup命令已经以文件名开头,那么您可以tail -f filename用来查看写入文件的内容。
Hennes

不起作用,一旦连接停止,文件将不再写入
Davoud Taghawi-Nejad

您是对的:我回答了问题(将输出发送到终端),但失败了。我相应地重写了我的答案。
dsh 2012年

-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  проекты
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.