cronなどに記述する「2> /dev/null」の「2」ってなに?

» 2002年01月16日 00時00分 公開
[木田佳克ITmedia]

この記事は会員限定です。会員登録すると全てご覧いただけます。

 定期的にコマンド実行ができるcronに記述する場合(crontab -eなどと指定)、場合によっては実行結果やエラー出力がスパムと化してroot宛にメールされてしまう。このため出力される実行結果のメッセージは、エラー時だけに抑えるなど破棄させるのが一般的だ。

 たとえば特定のプログラムをコマンドラインで次のように指定した場合(ここでは例としてWebalizerを挙げた)、

$ webalizer 1>file1 2>file2

1>file1の「1」は「標準出力」を指し、「file1」ファイルに出力

2>file2の「2」は「標準エラー出力」を指し、「file2」ファイルへファイルに出力(保存)される。

 さらに具体的な表示例を挙げてみよう。

1. 通常のコマンド実行による表示

# webalizer
[new_nlist] Warning: String exceeds storage size
Webalizer V2.01-06 (Linux 2.2.1) Japanese(EUC)
Using logfile /usr/local/apache/logs/access_log (clf)
Creating output in /usr/local/apache/htdocs/webalizer
Hostname for reports is 'galaxies.jp'
Reading history file... webalizer.hist
[new_snode] Warning: String exceeds storage size (107)
[new_snode] Warning: String exceeds storage size (130)
[new_snode] Warning: String exceeds storage size (90)

2. 標準出力をfile1に書き出す

# webalizer 1>file1
[new_nlist] Warning: String exceeds storage size
[new_snode] Warning: String exceeds storage size (107)
[new_snode] Warning: String exceeds storage size (130)
[new_snode] Warning: String exceeds storage size (90)

3. 標準エラー出力をfile2に書き出す

# webalizer 2>file2
Webalizer V2.01-06 (Linux 2.2.1) Japanese(EUC)
Using logfile /usr/local/apache/logs/access_log (clf)
Creating output in /usr/local/apache/htdocs/webalizer
Hostname for reports is 'galaxies.jp'
Reading history file... webalizer.hist

 上記の表示違いがすべてを物語ってくれる。通常、ここでのWebalizerと指定して画面上に表示されるのは「標準出力」と「標準エラー出力」が混ざっている(「1.」番のリスト参照)。

 続いて「2.」番リストの結果を見てほしい。ここでは「1.」番のリストで示す黄色の文字列(標準出力)がファイル「file1」に書き出されているため、画面上には「標準エラー出力」のみが表示される。

 さらに「3.」番のリストを見れば、標準エラー出力をファイル「file2」に書き出す指定のため、「2.」番リストとは反対に標準出力だけが表示されていることが分かるだろう。

 この2つを組み合わせて標準出力と標準エラー出力共に表示させないようにしたい場合には、次のように「&1」の指定を加えればよい。

4. 出力すべてを破棄させる

# webalizer 2>&1
〜何も表示されない〜

 これを応用して、次のように指定すればcron実行上では出力がメールされたりすることがないが、すべてのメッセージをファイルに書き出すといったことも可能になる。

5. 出力をすべてをファイル「file」に書き出して画面上には何も表示させない

# webalizer >file 2>&1
〜何も表示されない〜

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ