ソフトウェアエンジニア現役続行

雑多なことを綴ります

cronスクリプトが終了しない

cronスクリプトの実行が最後まで完了しない現象が起こりました。

調べたところ、cronスクリプトの標準出力(+標準エラー出力)の量が多すぎて、パイプ詰まりが起こってしまい、処理がそこで固まっていました。

例えば次のように大量の標準出力を行うcronスクリプトを書くと、crondはこのスクリプトを実行してパイプ詰まりを起こし、そこで処理が固まってしまいます。

# vi /etc/cron.daily/heavy_stdout.cron(←新規作成)
 #!/bin/bash
 dd if=/dev/urandom of=/dev/stdout bs=512 count=100000(←ファイルの内容はこの2行のみ)


crondは、cronスクリプトを実行するしたときの標準出力と標準エラー出力を見ています。そのため、出力が大きいとパイプ詰まりが起こってしまいます。

crondがcronスクリプトの出力を見ていることは、cronスクリプトをバックグラウンドで実行するときの注意点のエントリでも書いています。