bash スクリプトを Windows で定期的に走らせたかったので、 Cygwin 上で cron を使ったジョブスケジューリングをセットアップしてみた。
環境は以下の通り。
まずは、 cron と cygrunsrv パッケージを cygwin の setup.exe からインストールします。
cygrunsrv は cygwin 上で走るデーモンを Windows のサービスとして登録するツールです。
cygwin 上でこのコマンドを実行して cron を Windows のサービスとして登録し、 cygwin が起動していなくても cron が動作しているようにします。
作業はいたって簡単ですが、 cygrunsrv を正常に動作させるには管理者権限が必要ですので、 cygwin コンソールを管理者として起動します。
管理者として起動するには、 cygwin コンソールアイコンを右クリックして「管理者として実行 | Run as administrator」を選びます。
コンソールを起動したら、後は cron-config を実行するだけ。
$ cron-config Do you want to install the cron daemon as a service? (yes/no) yes Enter the value of CYGWIN for the daemon: [ ](ブランクのまま) You must decide under what account the cron daemon will run. If you are the only user on this machine, the daemon can run as yourself. This gives access to all network drives but only allows you as user. To run multiple users, cron must change user context without knowing the passwords. There are three methods to do that, as explained in http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1 If all the cron users have executed "passwd -R" (see man passwd), which provides access to network drives, or if you are using the cyglsa package, then cron should run under the local system account. Otherwise you need to have or to create a privileged account. This script will help you do so. Do you want the cron daemon to run as yourself? (yes/no) yes Please enter the password for user 'ma':(パスワードを入力) Reenter:(パスワードを入力) Running cron_diagnose ... WARNING: You do not currently have a crontab file. ... no problem found. INFO: A cron daemon is already running. In case of problem, examine the log file for cron, /var/log/cron.log, and the Windows event log (using /usr/bin/cronevents) for information about the problem cron is having. Examine also any cron.log file in the HOME directory (or the file specified in MAILTO) and cron related files in /tmp. If you cannot fix the problem, then report it to cygwin@cygwin.com. Please run the script /usr/bin/cronbug and ATTACH its output (the file cronbug.txt) to your e-mail. WARNING: PATH may be set differently under cron than in interactive shells. Names such as "find" and "date" may refer to Windows programs.
net コマンドでサービスを実行してみます。
$ net start cron The Cron daemon service is starting. The Cron daemon service could not be started. The service did not report an error. More help is available by typing NET HELPMSG 3534.