crontab ではパーセント記号をエスケープする
Posted on
タイトルのままですが、ハマったので忘れないようにメモ。
スクリプトの実行結果を日付つきのファイルに保存するために date コマンドでフォーマットを指定しましたが、なぜか構文エラーになります。同じコマンドを手動で実行すれば期待通りの動作をします。
*/10 * * * * /path/to/batch.sh > batch_`date +%Y-%m-%d-%H-%M-%S`.log
cron ログには途中までの不完全なコマンドが記録されています。
... CMD (/path/to/batch.sh > batch_`date +)
crontab(5) を確認すると以下の記述がありました。
その行のコマンド部(改行文字または % 文字まで)が /bin/sh (またはその crontab ファイルの SHELL 環境変数で指定されたシェル)によって実行される。
コマンド中にパーセント記号 (%) がバックスラッシュ (\) によってエスケープされずに置かれていると、改行文字に置き換えられ、最初に現れた % 以降の全てのデータは標準入力としてコマンドに送られる。
パーセント記号はコマンドの終端として認識されるようです。 % をエスケープすれば期待通りの動作になりました。
*/10 * * * * /path/to/batch.sh > batch_`date +\%Y-\%m-\%d-\%H-\%M-\%S`.log