screenの代わりにnohup&を使う
時間のかかるバッチ処理を手動で実行するとき、 sshセッションが切断しても大丈夫なようにscreenコマンドを使っていたけど、 他の方法を知ったのでメモしておく。
やりかた
サンプルスクリプト
#!/bin/sh # 永遠に標準出力と標準エラー出力を繰り返す while true do sleep 1 # 標準出力 echo `date` STD_LOG >&1 # 標準エラー出力 echo `date` ERR_LOG >&2 done
実行するコマンド
nohup sh ./script.sh 1> std.log 2> err.log &
コマンドの意味
&
: 裏ジョブ実行nohup
: 通常裏ジョブは、親プロセスが終了(ssh接続断など)すると、HUPシグナルで終了させられるが、nohup
つけることで回避できる1>
: 標準出力をファイルにリダイレクト。ファイルに書き出さないと、あとで出力内容を確認できない。2>
: 標準エラー出力をファイルにリダイレクト
出力結果
% tail -n 3 std.log 2021年 6月21日 月曜日 18時17分10秒 JST STD_LOG 2021年 6月21日 月曜日 18時17分11秒 JST STD_LOG 2021年 6月21日 月曜日 18時17分12秒 JST STD_LOG % tail -n 3 err.log 2021年 6月21日 月曜日 18時17分10秒 JST ERR_LOG 2021年 6月21日 月曜日 18時17分11秒 JST ERR_LOG 2021年 6月21日 月曜日 18時17分12秒 JST ERR_LOG
所管
- 標準出力と標準エラー出力をちゃんとリダイレクトしないと、出力結果を確認できなくなるのが注意点。
- screen使える環境なら、screen使えばいいのでは。