2010年7月10日土曜日

Cygwinのcronについて

Cygwinのcronを使う際に起きた問題をメモ。


まずcronをシステムサービスに登録する際の
コマンドですが引数に-Dを指定している解説サイトが
ありますが現在は-Dが使えなくなってるため、
そのまま登録すると起動に失敗してしまいます。

そのため-Dの代わりに-nを指定してください。
例:cygrunsrv -I cron -p /usr/sbin/cron -a -n


それからbashが新しいものになっている場合に
cron上からそのままシェルスクリプトを起動させると
一部コマンドが上手く機能しなくなります。

具体的にはupdatedbをcronから実行しようとすると
--purunepaths等の指定に失敗してしまいます。
これは内部でsedコマンドを呼び出した際に
後ろにcrを追加してしまっているため起きている問題の様です。

これを解決するにはwindowsの環境変数
「SHELLOPTS」に「igncr」を設定すれば良いようです。

もしくはcrontab -eを使い、コマンド指定前に
SHELLOPTS=igncr
を入力しておけばこの問題は発生しません。