Bash

讓 nohup 附加到 ’nohup.out’ 和明確地將其重定向到文件有什麼區別?

  • December 31, 2014

考慮以下場景:

tail.sh :

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

invoke.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和顯式重定向輸出有什麼區別?

當您通過 ssh 遠端啟動命令時,標準輸出不是終端。使用-t選項 withssh來獲得與您的兩個命令相同的行為。

有關 ssh 和 nohup 的更多詳細資訊:http://snailbook.com/faq/background-jobs.auto.html(取自 wiki 頁面:https ://en.wikipedia.org/wiki/Nohup )

引用自:https://unix.stackexchange.com/questions/176674