読者です 読者をやめる 読者になる 読者になる

crond の -x オプションについて

おいちゃん(さん) こと id:inouetakuyaMySQL ログのローテーション設定(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:犬のおまわりさん