2013/07/24

linux ssh nohup プロセスのスケジューリング


・シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視する
・ログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまう
・親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill (kill -HUP) する。
・nohup コマンドは HUP シグナルを無視するようにプログラムを実行する

★% ssh localhost "cat foo.txt"
プロセスのスケジューリング:
ssh が子プロセスとしてシェルを起動し、シェルが cat foo.txt を起動する
cat foo.txt が ファイルの内容をパイプバッファに書き込む
cat foo.txt が終了する
cat の親プロセスである、シェルが終了する
シェルが終了したので ssh がコネクションを切断する
パイプバッファの内容が失われてしまう
よって、プロセスの終了を監視するだけでは不整合が起こるため、入出力ストリームを監視するのだ。

とりあえず、下記でうまく行った。。また調べる
ssh root@remoteserver 'nohup /root/backup.sh > /dev/null ' &

これも
Pseudo-terminal will not be allocated because stdin is not a terminal.
=>http://takat.exblog.jp/12216326/
ssh root@remoteserver screen -d -m ./script
-----------------