まだ実行前の場合
nohup
でバックグランド実行
まだ実行前だったら大助かりです。
落ち着いて、 nohup
で実行してすぐに逃れられます。
# コマンド上で実行の場合 or シェルスクリプトで実行の場合
$ nohup sh -c 'sleep 5; echo Success!' &
$ nohup sh test.sh &
別に大事なものじゃないけど、時間がかかるものでやるといいでしょう。
$ nohup sh -c 'docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh' &
もう既に実行してしまった場合
ジョブをバックグラウンドへ
例えばコマンドでフォアグラウンド実行してしまった場合。。。
$ docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
これをバックグラウンド実行するときは、まず、control+z
で実行中のJobを停止
- 実行後、
control+z
で停止
$ docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
^Z
[1]+ 停止 docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
-
jobs
コマンドで後ほど確認もできる
$ jobs
[1]+ 停止 docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
- ジョブが複数あった場合はこんな感じになる
$ jobs
[1] 停止 docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
[2]- 停止 docker run --rm=true --name update-stage-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
[3]+ 停止 docker run --rm=true --name update-development-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
# []の中身がジョブ番号
# + : カレントジョブ
# - : 前のジョブ
- 停止しているジョブをバックグラウンド実行(ジョブ番号を指定しなければ、カレントジョブとなる)
$ bg ${ジョブ番号}
このまま終わったら通常のバックグラウンド実行と同じで、ログアウトしてしまうとプロセスがkillされてしまうので気をつける!!!
実行中のジョブをログアウト時もバックグラウンド実行する
disown
コマンドを利用する
-
job
の1番を実行
$ bg 1
- 実行状態になっていることを確認
$ jobs
[1] 実行中 docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh &
[2]- 停止 docker run --rm=true --name update-stage-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
[3]+ 停止 docker run --rm=true --name update-development-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
-
disown %${job番号}
で自分のjobテーブルから外れて実行される
$ disown %1
- jobsから消える
$ jobs
[2]- 停止 docker run --rm=true --name update-stage-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
[3]+ 停止 docker run --rm=true --name update-development-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
- プロセスを見ると動作している
$ ps x | grep sleep | grep -v grep
22222 pts/3 S 0:00 docker run --rm=true --name update-qa-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
22223 pts/3 T 0:00 docker run --rm=true --name update-stage-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
22224 pts/3 T 0:00 docker run --rm=true --name update-development-db --env-file=/home/core/.env quay.io/koudaiii/ops-tools:v1.4 ./update_qa_db.sh
ジョブが停止中の状態でdisownしてしまうと、ジョブテーブルから除外され、ログアウトしても消えないプロセスが残るので、かならず手動でkillすること