让 nohup 附加到“nohup.out”和显式将其重定向到文件有什么区别?

让 nohup 附加到“nohup.out”和显式将其重定向到文件有什么区别?

考虑以下场景:

尾部文件:

#!/bin/bash
tail -f test.txt

调用.sh:

#!/bin/bash
nohup ./tail.sh &

invoke_explicitredirect.sh:

#!/bin/bash
nohup ./tail.sh > out.log &

在终端中运行两者具有相同的效果:

  • 运行后我重新获得了终端的控制权./tail.sh
  • tail终端上没有出现任何输出

ssh但是,当使用(例如)运行它时ssh <user>@<hostname> "<script>"

  • invoke_explicitredirect.sh将控制权返回给ssh(并终止)
  • invoke.sh挂起,直到我发送SIGINT

man nohup如果可能的话,会nohup自动将输出重定向到“nohup.out”:

If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise.

nohup让附加到输出nohup.out和显式重定向输出之间有什么区别?

答案1

当您通过 ssh 远程启动命令时,标准输出不是终端。使用-t选项 withssh可以使两个命令获得相同的行为。

有关 ssh 和 nohup 的更多详细信息:http://snailbook.com/faq/background-jobs.auto.html(摘自维基页面:https://en.wikipedia.org/wiki/Nohup

相关内容