schedule2019-12-26

nohupを使ってmysqldumpをバックグラウンドで実行する

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

コマンドラインにパスワードを書いているので警告が出ているが、ダンプ完了まで実行できたので良い。

参考