[Linux] コマンド実行した処理が途中で止まる
現象
ssh で AWS EC2 上で、処理時間長めのバッチをコマンド実行したところ、処理が途中で停止してしまった。ログには、エラーが出ているのではなく、途中から出力されていなかった。
原因
ssh 接続がタイムアウトし、実行中のコマンドも自動的に終了されるため。
対処方法
nohup と & をつける。コマンド部分は sudo ... など実行したいものを書く。
$ nohup コマンド &
&:バックグラウンドで実行する。
nohup :ssh ログアウト時に送られる HUP シグナル (SIGHUP) を無視する。
※ SIGHUP シグナル : 制御端末の切断(ハングアップ)、仮想端末の終了
Linuxの「シグナル」って何だろう?
& でバックグラウンド実行にしても、ssh 接続がタイムアウトし、ログアウトになると ssh 上のジョブは終了する。nohup を付けることで、ssh ログアウト状態になっても強制終了されないようにしておく。