FC2ブログ

blogaomu2.1はこの度、http://blogaomu.comに引っ越しました。最新の更新はblogaomu.comにて行なっておりますので、ブックマーク・RSS等の設定をお願い致します。

cronでdateフォーマットを使うときはエスケープする

cronでdateフォーマットを指定するときは%をエスケープする必要があります。
そうでないと"date +"でコマンドが止まってしまうからです。

作業で定期実行のcronを仕込んでいたのですが、動いていなかったのでログを確認すると、
... CMD (cmd > batch_`date +)
こんな感じのログが残っていました。あれ、"date +"でコマンドが切れてる?
crontabを見てみるとこんなコマンドになってました。
00 1 * * * cmd > batch_`date +%Y%m%d`.log 2>&1
+で切れているってことは・・・。
%をエスケープしろ!とひらめいたので修正。
00 1 * * * cmd > batch_`date +\%Y\%m\%d`.log 2>&1
無事に動いてくれました。

さて、なぜ%をエスケープしないと思った動作をしてくれないのでしょうか?
crontab(5)のmanページを見ると、以下のように書いてあります。

Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

コマンド中の%記号はバックスラッシュ(\)でエスケープしないと、ニューライン文字(?)に変わってしまう。そして%の後に続くデータは全て標準入力としてコマンドに渡されます。(斜文字は筆者訳)

要するに、%はバックスラッシュでエスケープしないとその後に続く文字がコマンドに渡されてしまうよ。という話のようです。

[参考] : cronにdateコマンドをフォーマット指定(+%Y%m%d)で登録する時の注意 - i am void
http://d.hatena.ne.jp/ytotoy/20100708/1278608237
スポンサーサイト



シェアはこちらからどうぞ

このエントリーをはてなブックマークに追加
プロフィール

TAKAyuki_atkwsk

お知らせ
最新記事
最新記事のRSSフィード

最新コメント
最新トラックバック
カテゴリ
タグクラウド
月別アーカイブ
ブクログ
携帯百景