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