hk5’s memo

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

Connection: close