社内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 実行したいコマンド
または
$ 実行したいコマンド &
コメント