【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の更新結果を確認する事で、ログは諦めることとする。