【Linux】バックグランドでバッチ実行

金曜日の夕方に、
sshでログイン中のターミナルで、データ更新スクリプトを実行してしまったら、定時後も終わらないので、

$ ./ins_tbl_a.sh

# 実行後に、Ctrl+zで、実行中のジョブを一時停止して、
^Z
[1]+ 停止 ./ins_tbl_a.sh

# jobsコマンドで確認してみると、
$ jobs
[1]+ 停止 ./ins_tbl_a.sh

# [1]がジョブ番号で、+がカレントジョブなので、
# 停止しているジョブをバックグランド実行へ
$ bg 1

# もう一度、jobsコマンドで確認してみると、実行中になっている。
$ jobs
[1] 実行中 ./ins_tbl_a.sh &

# ログアウト後もプロセスkillされずに実行するには、
# disownコマンドで、自身のjobsテーブルから除外する。
$ disown %1

# もう一度、jobsコマンドで確認してみると、一覧に表示されなくなる。
$ jobs

# 実行中のプロセスをpsコマンドで確認すると、プロセス一覧に表示される。
$ ps -ef | grep ins_tbl_a.sh | grep -v grep

# また、今回は、MySQLのテーブル更新スクリプトの為、MySQLにログインして、プロセスを確認すると、
# 該当するプロセスのInfo欄に実行中のクエリが表示される。
$ mysql -uroot -ppassword

MairaDB [(none)]> show full processlist;


ただし、ターミナルに出力されるログが残らない。
ログ出力先を指定して、crontabや nohup <スクリプト> &で実行するのがよかった。。。

./ins_tbl_a.sh > ins_tbl_a.`date "+%Y%m%d_%H%M%S"`.log 2>&1

今回は、火曜日にDBの更新結果を確認する事で、ログは諦めることとする。