crontabでdateコマンドを実行


cronのコマンドに引数として日付を与えたかった。

dateコマンドでYYYY-MM-DD形式の日付を与えるためにcrontabにはこう記述した。


*/5 * * * * /bin/sh /path/to/script `date '+%Y-%m-%d'` 

しかし動かない。
ログにはこんな感じで不完全なコマンドが記録されている。

Nov 30 19:30:01 myhost CRON[18201]: CMD (/bin/sh /path/to/script `date '+)

確認したところ、crontabに書くコマンドは%(パーセント)は改行文字に置き換えられるとのこと。
そのため%の前でコマンドが切れていたのだ。

Man page: crontab

「第 6」フィールド (行の残りの部分) には実行されるコマンドを指定する。 その行のコマンド部 (改行文字または % 文字まで) が /bin/sh (またはその crontab ファイルの SHELL 環境変数で指定されたシェル) によって実行される。 コマンド中にパーセント記号 (%) が バックスラッシュ (\) によってエスケープされずに置かれていると、 改行文字に置き換えられ、最初に現れた % 以降の全てのデータは 標準入力としてコマンドに送られる。

パーセント記号をエスケープしたら意図したとおりに動いた。


*/5 * * * * /bin/sh /path/to/script `date '+\%Y-\%m-\%d'` 

crontabに%(パーセント)を書くときはエスケープすること。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です