【Linux】SSHが切れた時、実行中のプロセスは死んでしまう

Linux

 社内VPNを接続した状態で、TerraformでAWS環境を構築する際、terraform applyコマンドが実行している途中、VPNの制限時間を気づかず、VPNの切断とともに、SSH接続も切断されました。
 「まあ~SSHだけ切断されたので、プロセスは続くでしょう」と思ったが、慌ててもう一回接続して確認してみると、terraform applyの実行プロセスが死んでしまい、AWS上一部の構築が終わったが、tfstateファイルは更新されず、terraformで管理する環境と実環境の差分が出てきました。。。
 最終的に、terraform importを実施して、terraformと実環境を統一されましたが、やはり、SSHが切れたら、実行中のプロセスが死んでしまうことがわかりました。

SSHが切れた時、実行中のプロセスはどうなるか?

 SSH接続が切れた時、
 ・kernelからbashに SIGHUP が送られる
 ・bash はフォアグランドプロセスに SIGHUP 送り、バックグランドプロセスへは何もしない
 ・SIGHUPを受信したプロセスは、終了するのがデフォルトの動作となっている

 悲しい話となりますが、SSH接続が切れた場合、基本的に実行中のプロセスが終了してしまいます。

対応策

 コマンドを実行する前なら、
  ・nohupコマンド(SIGHUPシグナルを無視するように処理を実行するコマンド)利用。
  ・&コマンド(バックグランドでコマンドを実施させるコマンド)利用。
 そうすると、sshログアウトしても処理を継続することができます。

$ nohup 実行したいコマンド

または

$ 実行したいコマンド &

コメント

タイトルとURLをコピーしました