はじめに
Linuxで処理をバックグラウンドで実行する方法をまとめる。
コマンドプロンプトが表示されるまで待機する必要がなくなるため、長時間の処理を実行するのに便利。
また、標準出力を保存する方法も記載する。標準出力にログを表示し、進捗を確認するようにしている際に便利。
ただし、Macユーザなどに人気なzshでは本記事の方法では動かないので注意してください!
SSH接続したマシンで実行し、接続を切断しても処理は続くため、ジョブを提出し一度そこから離れ、終わった頃に結果を確認する、といったことも可能。
(ちゃんと書くと、ジョブを投稿後にSSH接続を切り、処理が終わった頃に再接続し結果を確認することも可能)
関連して、Dockerコンテナ内の処理をバックグラウンドで実行する方法もまとめたので参考にしてほしい。
時間がない人向け
バックグラウンドでの実行方法
コマンドの末尾に&
をつけるだけ。例えば以下。
$ python3 run.py &
方法
バックグラウンドでの実行方法
コマンドの最後に&
を入れるだけ。
例えば、pythonでrun.py
というモジュールをバックグラウンドで処理する場合、以下のようなコマンドを入力する。
$ python3 run.py &
ここで、run.py
のモジュールを以下のように想定する。
print('hello world')
これを通常通りフォアグラウンドで実行(通常どおり実行)すると、以下のようになる。
$ python3 run.py
hello world
しかしバックグラウンドで実行すると標準出力がコマンドプロンプトに表示されてしまう。
標準出力の保存方法
標準出力を保存する場合、以下のように実行する。
$ python3 run.py > run.log &
または、標準エラー出力と区別するために以下のように書いても良い。
$ python3 run.py 1> run.log &
ログファイルが上書きされるのを防ぎたい場合は、以下のように書く。
$ python3 run.py >> run.log &
または
$ python3 run.py 1>> run.log &
標準エラー出力の保存方法
標準エラー出力を保存する場合は以下のように実行する。
$ python3 run.py 2> run_error.log &
上書きを防ぎたい場合は以下のように書く。
$ python3 run.py 2>> run_error.log &
標準出力と標準エラー出力を別々のファイルに記録する方法
以下のようなコマンドを実行する。
$ python3 run.py 1> run.log 2> run_error.log &
上書きを防ぐ場合は以下
$ python3 run.py 1>> run.log 2>> run_error.log &
参考
https://qiita.com/skyknsk/items/5aff81529c5c848915c8
https://atmarkit.itmedia.co.jp/ait/articles/1707/21/news001.html