cronの設定で標準出力のリダイレクトの記述の有無によってプロセスの起動の仕方が変わる

今まで気付かなかった。

標準出力をリダイレクトしない下記のような設定をした場合

たとえばperlスクリプトをcronに登録するときに、このようにcrontabにリダイレクトを書かないと

[foo@sv01 ~]$ crontab -l
* * * * * /home/foo/bar.pl

crontabに設定したコマンドがcrondの子プロセスとして起動される。

[foo@sv01 ~]$ ps -ef
foo      23250  2413  0 11:25 ?        00:00:00 crond
foo      23253 23250  0 11:25 ?        00:00:00 /usr/bin/perl /home/foo/bar.pl
foo      23278 23159  0 11:25 pts/2    00:00:00 grep 23250
(他省略)
標準出力のリダイレクトを書いた場合

crontabにリダイレクトを書くと

[foo@sv01 ~]$ crontab -l
* * * * * /home/foo/bar.pl > /dev/null 2>&1

shのプロセスがcrondの子プロセスになり、crontabに設定したコマンドはそのshプロセスの子プロセスになる。

[foo@sv01 ~]$ ps -ef
foo      23570  2413  0 11:34 ?        00:00:00 crond
foo      23571 23570  0 11:34 ?        00:00:00 /bin/sh -c /home/foo/bar.pl > /dev/null 2>&1
foo      23572 23571  0 11:34 ?        00:00:00 /usr/bin/perl /home/foo/bar.pl
(他省略)


確認した環境:CentOS(4.4 x86-64/5.3 x86-64)