SSHの接続先でdumpを取っていたら、SSH接続がタイムアウトしてdumpも途中で止まってしまった。
Terminal close -- exit!
この悲しみは2度と起こしてはならないため、SSHが切れてもバックグラウンドジョブで実行させる。
nohupコマンド
SSH接続がタイムアウトするとSIGHUPが送られ実行中のジョブが停止する。 nohupを使って実行したジョブはこのSIGHUPを無視して継続してくれる。
方法はnohup コマンド &
で最後に&
を付ける。
実行したディレクトリにnohup.out
が作られ、標準出力はそこに追加保存される。
せっかくなので、シェルを組んで動かす。
# 作ったシェルスクリプト
$ cat dump.sh
#!/bin/bash
echo -n "START:"
date
# ダンプの処理
mysqldump -u user -ppasswd -h localhost -B database > dump-$(date "+%Y%m%d").sql
echo -n "END:"
date
# バックグラウンドジョブで実行
$ nohup ./dump.sh&
nohup.out
の結果
START:Thu Dec 26 10:36:54 JST 2019
Warning: Using a password on the command line interface can be insecure.
./dump.sh: line 5: 7332 Terminated mysqldump -u user -ppasswd -h localhost -B database > dump-$(date "+%Y%m%d").sql
END:Thu Dec 26 10:57:43 JST 2019
コマンドラインにパスワードを書いているので警告が出ているが、ダンプ完了まで実行できたので良い。
参考
MySQL server has gone awayがmax_allowed_packetを変更して解決した
MySQLschedule2020-03-11