crontabで日付付きファイル名を作るときの落とし穴
私がよくやってしまう、crontabでのミスを紹介します。
ミスの内容
毎回かなりの頻度で間違えるのが、ファイル名に日付を入れる方法です。
例えば、以下のような名前のファイルを作りたいとします。
XXX_<今日の日付>.log
プロンプト上やシェルスクリプトでは、以下のような書き方でOKです。
XXX_$(date +%Y%m%d).log
しかし、crontabではこれをそのまま使うことができません。
なにやら、"date"コマンドの"%"部分がcrontabによって[改行]として読み込まれてしまうようです。
そのため、うまく動きません。
正しい記載方法(crontab内)
シェルスクリプトを使わず、crontabに直接書く場合は、" % "を" \ "でエスケープする必要があります。
XXX_$(date '+\%Y\%m\%d').log
ミスの流れ
私の場合、だいたいこんな流れでミスをします。
プロンプト上でコマンドの確認
→問題なく動く
→そのままcrontabに貼り付け
→cronが実行されない
→ログを確認し、"date"以降読み込まれていないことを確認する
おわりに
プロンプト上で実行できても、crontabでは実行できないことって意外と多いですよね。
今回は「もう2度と間違えないぞ」の思いを込めて書きました。
同じような"あるあるミス"の経験がある方はぜひコメントで教えてください!
この記事が誰かの助けになればうれしいです。