googleで検索したらすぐに出ました。
手順
まず、Cygwinのインストーラー(setup.exe)からcygrunsrvとcronをインストールしておく。あと、crontab編集のためにvi(m)とかもインストールしておくとよいかも。
インストール後、サービスに登録する。
$ cygrunsrv -I cron -p /usr/sbin/cron -a -n
cygrunsrv -S でスタート。
$ cygrunsrv -S cron
cygrunsrv -Q で状態を確認。
$ cygrunsrv -Q cron Service : cron Current State : Running Controls Accepted : Stop Command : /usr/sbin/cron -n
ところで。Webで調べるとcronの引数に-Dを指定してるサイトばっかりだったんだけど*1、-Dってなんだ?マニュアルにも載ってないし・・・。試してみると、-Dをつけるとforegroundで動いてるみたいだけど。
ソースを見てみると、NoForkオプションみたいですね。backward compatibilityのために残しているけど、今は-nオプションを使ったほうがいいみたい。
static void parse_args(int argc, char *argv[]) { int argch; while (-1 != (argch = getopt(argc, argv, "Dnx:"))) { switch (argch) { default: usage(); case 'x': if (!set_debug_flags(optarg)) usage(); break; case 'D': /* Cygwin backward compatibility */ case 'n': NoFork = 1; break; } } }
マニュアルにも書いてありました。
The -n option changes this default behavior causing it to run in the fore-
ground. This can be useful when starting it out of init.
あとは、マイコンピューターを右クリックして、「管理」→「サービスとアプリケーション」からcronを選んで、必要に応じて「デスクトップとの対話をサービスに許可」をチェックする。
んー
めんどくさそうとか、Windowsのタスクスケジューラーと競合するじゃんとか思って微妙に敬遠してたけど、案外楽ちんだなあ。vi入れると使いごこちはUNIXと変わらない。cygrunsrvの使い勝手が、某UNIXのサービス監視系コマンドに似てて*2楽しいぞ。これは積極的に使っていきたい。タスクスケジューラーより保守が簡単だしね。crontabをコピーしときゃいいわけだし。
追記
これをcrontabにコピペしておくと便利。いつも忘れるんだよね。
# * * * * * command to be executed # - - - - - # | | | | | # | | | | +----- day of week (0 - 6) (Sunday=0) # | | | +------- month (1 - 12) # | | +--------- day of month (1 - 31) # | +----------- hour (0 - 23) # +------------- min (0 - 59) # minute hour day_of_month month weekday command
追記2
手動で設定すると動かないことがあるので、cron-config で設定したほうがよさげ。
あと、動かないときは /usr/bin/cronevents を実行するとログが出てきます。(Windowsのイベントログのようです)
追記3
croneventsで"WRONG FILE OWNER"が出るときは、/etc/passwd と /etc/group の設定が正しいか確認しましょう。
- ユーザーID
- グループID
- ホームディレクトリ
など。