ログを出力しないプロセスをバックグランドで実行する方法


process-background-nologs

開発メモです。
例えば、Linuxであるコマンドを実行する場合に、実行ログエラーログも必要なく、バックグラウンドで実行する方法です。
ネットでは標準エラーは残しておくべきだとの意見が多いですが、エラーが発生しても無視したいので、ここではそれすら残さないようにします。


ログを残さない!

頻繁に同じプロセスを実行する際、その処理が膨大だった場合、そしてその膨大な処理に何らかの不具合が発生した場合、出力されるログも膨大になってしまいます。
しかも、ログにはほぼ同じ内容が出力されるはずです。
特に検証済みで、結果を確認しなくて良い、もしくは、エラーが発生しても無視して問題ないのなら、ログを出力しない方が良いこともあります。

全ての出力結果を捨てる

早い話、書き方は以下の通りです。

command > /dev/null 2>&1

出力結果を捨てる[ > /dev/null ]と、エラー出力の結果を標準出力の結果とマージする[ 2>&1 ]を組み合わせています。
つまり、エラーと実行のログを一緒にして捨てるということです。
詳しくは、参考サイトをご参照ください。

## 質問- `command > dev/null 2>&1`ってよく書いてませんか?- crontabでよく書いてませんか?- でもそれ、前のcrontabコピペして書いてませんか?- 実は意味を理解せずに書いてません...
いい加減覚えよう。 `command > /dev/null 2>&1`の意味 - Qiita - Qiita

バックグラウンドで実行する

これは調べればすぐに出てきました。
末尾に「&」を付けるだけのようですね。
command &
これだけです。
特に説明の必要はありませんね。
著者には利用する場面を想像できませんが、巷ではプロセス実行中にバックグラウンドに切り替る情報が多かったです。

ログを残さずバックグラウンドで実行

いよいよ実行方法です。
上記で記述した2つの内容を単純に掛け合わせればできあがるのですが、書く順番が重要なようです。
つまり、[&]を[ > /dev/null ]の前に書くのか[ 2>&1 ]の後ろに書くのか問題があります。
その答えは以下の参考サイトにズバリ書いてありました。

$ /path/to/bin > /dev/null 2>&1 & の順でよい。
プロセスをバックグラウンドで起動しつつ、標準出力とエラー出力を捨てる - stack_... - stack_stuck’s blog
正しくはこのように書くようです。
command > /dev/null 2>&1 &

これでプロセス実行時のログを出力せずにバックグラウンドで実行できます。
最後に注意。
何も出力されないので、十分に検証してから実行するようにしましょう。




コメント

このブログの人気の投稿

Linuxでファイルの改行コードLF⇔CRLFを変換する方法

RHEL 7でスタティック(静的)ルートを追加する4つの方法

SQLPlusでのOracleリモート接続とSQLファイルを実行する方法