もじれつとがめん

プログラムの忘備録とゲームとかその他色々。

crontabの%の扱いについて

お久しぶりです。

仕事が忙しーとか、友人と遊んでたからーとか、ゲームおもしれーとか、多々理由はありますがとにかく久しぶりの更新です。

ぶっちゃけ第二回の更新だけどね。

 

気を取り直して書いていきます。

 

crontabでの%の扱いについて

今日仕事中にcrontabでdbのバックアップを定期的に生成するように設定する時に遭遇した。

ここでcrontabと書いてあるけどcronの記述と共通するみたい。

参考になった記事

http://d.hatena.ne.jp/keigoi/20090204/1233715870

 

なぜかcrontabで設定したコマンドが実行されていない!

  • dateで日時を取得してそれをコマンドの中で文字列として利用しようとしていた

ファイル名に今日の日付を利用したくて

[text]

/test/hoge/date +%Y%m%d.backup

[/text]

こんな感じのバックアップファイルを作りたいのだがcrontabでコマンドを設定すると正常動作しない。

date等のコマンドの結果をコマンド内の文字列として扱いたい場合は``(シングルクォート)で対象のコマンドを囲めば文字列として扱ってくれる。

 

%が悪さをしていた(いや、crontabにおけるルールなだけなんだけどね)

  • crontabで入力されるコマンド中の%は改行と解釈をされる

まさしくこれが原因だった。

ちなみに俺のviもcrontabのコマンド入力中に%を入力するとそれ以降ピンク色の文字になって明らかに異常を訴えていましたw

一応簡単に検索してみるとその問題についての記事がいくつか発見したけど、%以外の記号も特殊な解釈があるのかもしれない。現時点では%以外に俺は知らない。

 

crontabで%を扱うときは\(それかバックシュラッシュ)でエスケープしよう

  • 解決は非常に簡単で%の直前に\を置くだけ

具体的には

[text]

/test/hoge/date +%Y%m%d.backup

[/text]

先ほどのコマンドを

[text]

/test/hoge/date +\%Y\%m\%d.backup

[/text]

とするだけ。すごい単純。

 

 

このようにcrontabのルールによっていつも通りのコマンドが動作しなかった。以下まとめ

crontabで%を使用するなら直前に\をつけるようにしよう

 

 

終わりに

いざ分かるとすごく凡ミスな気がする...

この原因究明に2時間費やしてしまったんだけど、いかんせんまさか%が悪さするとは考えもしなかったw

まぁviがちゃんと異常を訴えてくれたんだけど、"なんで色違うの??たぶん、コマンドが長すぎるのかなw"とか検討違いな事考えた俺は反省しなきゃな。viの異常は確かに異常なんだと。