おいちゃん(さん) こと id:inouetakuya の MySQL ログのローテーション設定(logrotate)(flush-logs が cron で動かないときの対処を含む を読んだ後、cron のデバッグ用のオプションって何かあるのかな〜 と man 8 crond を眺めていました。
-x オプション
- man 8 crond
SYNOPSIS cron [-n | -p | -s | -m<mailcommand>] cron -x [ext,sch,proc,pars,load,misc,test,bit] # 省略 -x With this option is possible to set debug flags.
crond の起動オプションに -x を指定することでデバッグフラグが立つようです。が、どういう挙動になるのか manを読んでもわからない ググってみてもわからない ニャンニャン ニャニャーン♪ *1 ... ということでソースを読みました。
ソースを追う
環境は SL6 です。まずは SRPMからソースを出す
$rpm -qf /usr/sbin/crond cronie-1.4.4-7.el6.x86_64 $ yumdownloader --source cronie $ rpm -ivh cronie-1.4.4-7.el6.src.rpm $ ls ~/rpmbuild/SOURCES/cronie-1.4.4.tar.gz
ざっと調べたところ ext,sch,proc,pars,load,misc,test,bit に対して、下記の様な定数が対応している様子です。
- src/macros.h
#define DEXT 0x0001 /* extend flag for other debug masks */ #define DSCH 0x0002 /* scheduling debug mask */ #define DPROC 0x0004 /* process control debug mask */ #define DPARS 0x0008 /* parsing debug mask */ #define DLOAD 0x0010 /* database loading debug mask */ #define DMISC 0x0020 /* misc debug mask */ #define DTEST 0x0040 /* test mode: don't execute any commands */
試しに DEXT で grep すると下記の様に引っかかります。
rc/entry.c: Debug(DPARS | DEXT, ("get_list()...entered\n")) src/entry.c: Debug(DPARS | DEXT, ("get_list()...exiting w/ %02x\n", ch)) src/entry.c: Debug(DPARS | DEXT, ("get_range()...entering, exit won't show\n")) src/entry.c: Debug(DPARS | DEXT, src/entry.c: Debug(DPARS | DEXT, ("set_element(?,%d,%d,%d)\n", low, high, number)) src/cron.c: Debug(DSCH | DEXT, ("user [%s:%ld:%ld:...] cmd=\"%s\"\n", src/macros.h:#define DEXT 0x0001 /* extend flag for other debug masks */ src/macros.h:#define Set_LineNum(ln) {Debug(DPARS|DEXT,("linenum=%d\n",ln)); \ src/do_command.c: Debug(DPROC | DEXT,
nrhd。デバッグ用のログを出してくれるのですね。その他のフラグについてもほぼ同様です。DTEST だけが例外で、dry-run な挙動になるようです。
一件落着。
まとめ
cron に登録したジョブを任意のタイミングで実行させる、デバッグに便利なインタフェースあったらなーと思ったのですが無さそうですね。なにかしら tips, hack ありましたらご一報を。
*1:犬のおまわりさん