Linux crontabの下でdateコマンドとsudoコマンドを使用するピットについて


rootのcrontabにタスクプランを追加するには、wwwユーザーでコマンドを実行し、その時点で名前が付けられたログファイルに出力をリダイレクトします.大体次のようになります.
/usr/bin/sudo -u www /usr/local/php/bin/php /www/open/www.php  &> /var/log/xxx_cron_log/www_$(date +"%Y%m%d_%H:%M").log

ここには2つの穴があります.
1、習慣上の`date+"%Y%m%d_%H:%M"`と$(date+"%Y%m%d_%H:%M")はcrontabでは機能せず、`date+"%Y%m%d_%H:%M"`と$(date+"%Y%m%d_%H:%M")の形式で
2、直接crontabでsudoでコマンドを実行するのは無効で、sudo:sorry,you must have a tty to run sudoを提示します./etc/sudoersを変更し、visudoまたはvim/etc/sudoersを実行して「Defaults requiretty」という行をコメントする必要があります.sudoはデフォルトでtty端末を必要とするため、crontabのコマンドは実際にはttyなしで実行されます.注記「Defaults requiretty」を削除すると、sudoを端末なしで実行できます.
レノボ:topコマンドも端末で実行する必要があると思うのでshellスクリプトで直接topコマンド式を呼び出すのは無効です