はじめに
別記事に、Linux上でバックグラウンドで実行する方法をまとめた。
今回は、Dockerコンテナ内でバックグラウンドで実行する方法をまとめる。
SSH接続したマシンで実行し、接続を切断しても処理は続くため、ジョブを提出し一度そこから離れ、終わった頃に結果を確認する、といったことも可能。
(ちゃんと書くと、ジョブを投稿後にSSH接続を切り、処理が終わった頃に再接続し結果を確認することも可能)
時間がない人向け
コンテナの立ち上げ方法
通常通り、docker run
から立ち上げる。ただし、--rm
のオプションは入れないこと。
バックグラウンドでの実行方法
root@container_id:# python3 run.py &
コンテナから出る方法
ctrl + q + p
で出る
方法
コンテナの立ち上げ方法
通常通り、docker run
から立ち上げる。ただし、--rm
のオプションを入れないこと。入れてしまうと、コンテナから出たときにコンテナが削除されてしまう。
以下はコンテナが立ち上がった前提で書く。
バックグラウンドでの実行方法
Linux版の記事同様、末尾に&
をつけるだけで良い。
例えば、pythonでrun.py
というモジュールをバックグラウンドで処理する場合、以下のようなコマンドを入力する。
root@container_id:# python3 run.py &
※ root@container_id:#
はコンテナ内のコマンドプロンプト。
標準出力の保存方法
標準出力を保存する場合、以下のように実行する。そうすると、標準出力がrun.log
のファイルにテキストファイル形式で保存される。
root@container_id:# python3 run.py > run.log &
または、標準エラー出力と区別するために以下のように書いても良い。
root@container_id:# python3 run.py 1> run.log &
ログファイルが上書きされるのを防ぎたい場合は、以下のように書く。
root@container_id:# python3 run.py >> run.log &
または
root@container_id:# python3 run.py 1>> run.log &
標準エラー出力の保存方法
標準エラー出力を保存する場合は以下のように実行する。そうすると、標準エラー出力がrun_error.log
のファイルにテキストファイル形式で保存される。
root@container_id:# python3 run.py 2> run_error.log &
上書きを防ぎたい場合は以下のように書く。
root@container_id:# python3 run.py 2>> run_error.log &
標準出力と標準エラー出力を別々のファイルに記録する方法
以下のようなコマンドを実行する。そうすると、標準出力がrun.log
ファイルへ、標準エラー出力がrun_error.log
へそれぞれテキストファイル形式で保存される。
root@container_id:# python3 run.py 1> run.log 2> run_error.log &
上書きを防ぐ場合は以下
root@container_id:# python3 run.py 1>> run.log 2>> run_error.log &
コンテナから出る方法
ctrl + q + p
を押し、コンテナから出る。exit
で出てしまうと、コンテナがストップされるため注意。(ただし、コンテナを立ち上げるとき、docker exec
から立ち上げると、exit
から出てもストップされない)