次のシナリオを考えてみましょう。
テールファイル:
#!/bin/bash
tail -f test.txt
call.sh:
#!/bin/bash
nohup ./tail.sh &
call_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
withオプションを使用します。ssh
sshとnohupの詳細:http://snailbook.com/faq/Background-jobs.auto.html(wikiページから取得:https://en.wikipedia.org/wiki/Nohup)