▼スレッド
│
└◇2594:cronがサービスだと動かない [うえだ] 11/26 20:28
└◇2596:Re:cronがサービスだと動かない [discypu] 11/26
└◇2603:Re[2]:cronがサービスだと動かない [うえだ] 11/29
└◇2605:Re: cronがサービスだと動かない [discypu] 11/30
└◇2611:Re[2]: cronがサービスだと動かない [うえだ] 12/02 <
postgresqlのバックアップを定期的に手軽に取りたいと思い、cronをインストールしました。スレッド一覧
インストール、サービスの追加、cronの開始まではエラーも出ずできました。
が、crontabで処理を書いてみても、待てど暮らせど実行されません。ためしにサービスを終了して単独でcronを起動してみると、先ほど書いた処理が正しく実行されます。どうすればサービスで起動しても動くようになるでしょうか?
・環境
windowsXP SP2(「Windows ファイアウォール」は無効にしています)
Package Version Status
cron 3.0.1-12 OK
cygwin 1.5.12-1 OK
・インストール
cygwinのSetup.exeを使い、cronを選んでインストールしました
このときは特にエラーやメッセージなどは出ませんでした。
パスを追加し、念のためPCを再起動しました
・サービスの追加
以下のように追加しました
このときも特にエラーやメッセージなどは出ませんでした。
$cygrunsrv -I cron -d "CYGWIN cron" -p /usr/sbin/cron -a -D
$cygrunsrv --start cron
・cronの起動の確認
$ps -ef | grep cron
SYSTEM 2784 2760 ? 20:12:24 /usr/sbin/cron
・crontabで処理を登録。ちゃんと登録されたか確認
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.3852 installed on Wed Nov 24 16:48:02 2004)
# (Cron version -- $Id: crontab.c,v 1.7 2003/04/15 15:13:41 corinna Exp $)
* * * * * /bin/date.exe >> /tmp/aa.log
登録されているように見えるが、/tmp/aa.logには五分以上待っても変化なし。
・あきらめていったんサービスを終了
$cygrunsrv --stop cron
$cygrunsrv --remove cron
・単独でcronを起動
/var/run/cron.pidをエクスプローラで削除してから起動
$cron
・cronの起動の確認
$ps -ef | grep cron
postgres 3240 1 ? 20:22:09 /usr/sbin/cron
・登録された処理の確認
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.3852 installed on Wed Nov 24 16:48:02 2004)
# (Cron version -- $Id: crontab.c,v 1.7 2003/04/15 15:13:41 corinna Exp $)
* * * * * /bin/date.exe >> /tmp/aa.log
「crontab -l」を実行してすぐ「/tmp/aa.log」が作られ、あけてみると正しく日付が入っていた。
その後、ただしく一分ごとに更新される。
追試してませんが、/usr/*.exe に対して、chmod a+x ではスレッド一覧
いかが?
ようするに、サービスが動作するアカウント
(=SYSTEM アカウント) に対して、
/bin/*.exe が実行権限を持っていないと思ったので。
ヒントをありがとうございます。なるほどサービスとして起動する場合は「SYSTEM」ユーザーが起動したことになるのですね。スレッド一覧
さっそくchmod a+xで実行権限を付与してみました。ls -lではちゃんと実行権限が全ユーザーに付いたことも確認できました。念のためサービスを停止して削除してから再度サービスを追加・起動しました。
が、やっぱり実行されませんでした。現象は前と同じく「cygrunsrv --start cron」ではエラーがおきず、「ps」で見ても起動しているように見えるが、書いた処理が時間になっても実行されません。
ひょっとしてこのSYSTEMユーザーでcronをインストールしてやればうまくいくのではないかと思いつきました。
が、「su」はどうもcygwinでは使えないようですね。「login」でログインできそうだと思ったのですが、パスワードがわからず、この案は使えませんでした(windowsのすべてのユーザーのパスワードを試したのですがだめでした)。
せめてログにエラーでも出ていれば手がかりになるのですが、「[5744] cron started」と書いてあるきりで役に立ちません。
実行権限やユーザー周りでまた試行錯誤してみます。
あれからちょっと試してみました。ここに投稿するのスレッド一覧
忘れてました…もうしわけない。
http://discypus.jp/pukiwiki/pukiwiki.php?Cygwin%2Fcron
どうも、chmod a+x は関係ないようです(なぜだろう…)
あと、イベントビューアでアプリケーションログを見れば、
なにかしらエラーメッセージが残ってるかも知れません。
教えていただいたサイトに行ってみました。スレッド一覧
私がやったのと違うところはcygrunsrvにインストールするところのオプションだけだったので、cronサービスを終了してからやってみたのですが、やはり実行されませんでした。現象は前と同じく「cygrunsrv --start cron」ではエラーがおきず、「ps」で見ても起動しているように見えるが、書いた処理が時間になっても実行されません。
ほかにイベントビューアを見てみましたが、エラーっぽいものは見当たりませんでした。
しょうがないので、サービスとして起動することはあきらめて、単独では起動するので、シェルスクリプトを使って、windowsのスタートアップに
c:\cygwin\bin\bash -f /usr/local/etc/startcron.sh
と書いたバッチファイルを登録することで対処しました。これだとサービスにはならないですが、ちゃんと動いているので、いちおう目的を達することができました。
自分の業務を楽にするだけの目的で、人に配ったりする予定はないので、また新たなトラブルが出てくるまではこれでお茶を濁そうと思います。
ありがとうございました。