murawaki の雑記

はてなグループから移転してきました

cron on cygwin

cygwin で cron を動かそうとしてはまったのでメモ。

はまった点は三つ。複合的なので症状と原因の整理はできていない。

  1. cron が起動時にエラーを吐く。
  2. crontab がすぐに反映されない。
  3. 通常と環境が違う。ssh-agent を反映させるのが面倒。

サービスの登録には普通は cygrunsrv を使う。sshd はこの方法でうまく行った。ただし、Windows 7 では「管理者として実行」する必要がある。

以下のコマンドの場合、エラーメッセージが返ってくる。

cygrunsrv --install cron --path /usr/sbin/cron --args -D
cygrunsrv --start cron

いろいろ調べたところから推測すると、利用者 SYSTEM として実行しようとすると不都合な環境であるらしい。

解決策。/usr/bin/cron_diagnose.sh という便利なスクリプトを実行。run as yourself という質問に対して yes と答える。これで cron が私の権限で実行されるようになった。ここでも「管理者として実行」が必要。

二つ目の問題は、Wikipedia に「よくあるミス」として載っていた。デバッグのために cron の実行時刻として 40 秒先とかを指定して crontab で登録すると、すぐには実行されない。実行時刻を少し先にすると解決。

最後の問題。cron の実行は環境設定が異なる。そのため、ssh を使う処理は、ssh-agent の chain が切れているので失敗する。keychain という utility を使えばいいらしいことを知ったが、いつものように環境変数 SSH_AUTH_SOCK を自力で設定することによって解決。