crontabでの「%」の扱い

昔、遭遇した気もするが、また忘れていたのでメモ。多分、常識の範疇w


crontabにこんな感じで設定を仕込もうとしたんですね。

*/5 * * * * /usr/bin/iotop -b -k -t -n 2 -o >> /var/log/iotop/"`hostname`_`date '+%F_%H'`"


すると、「メールが /var/spool/mail/root にあります」とメールが届きまして、、、

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

こんな感じで怒られたわけです。


あんれー?と思って、"/var/log/cron"を確認すると、

CROND[17743]: (root) CMD (/usr/bin/iotop -b -k -t -n 1 -o >> /var/log/iotop/"`hostname`_`date '+)

と表示されていて、あんれーーー!「%」以降がどっかいっちゃってるー、と気付きました。


んで、まぁ定番の"man 5 crontab"とかすると、ちゃんと答えが書いてあるわけです。。。

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

Man page of CRONTAB


・・・ということで、

*/5 * * * * /usr/bin/iotop -b -k -t -n 2 -o >> /var/log/iotop/"`hostname`_`date '+\%F_\%H'`"

こんな感じで、crontabでの「%」記述は必要に応じてエスケープしましょうというログでした・・・。

それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


プロのための Linuxシステム・10年効く技術 (Software Design plus)

プロのための Linuxシステム・10年効く技術 (Software Design plus)