ksaitoの日記

日々試したことの覚え書き

cygwinのcronをVistaで動かす

移転しました。

自動的にリダイレクトします。

Vistacygwinのcronを動かそうとして断念していましたが、ついに動かすことができました。
前回の試みは、こちら

cronサービス用ユーザを登録する

こちらのサイトを参考にcronサービス用のユーザを登録します。
参考1参考1

ユーザの登録

専用のユーザをWindowsのコマンドで登録して管理者グループに追加します。

$ net user cron_admin <パスワード> /add /yes
コマンドは正常に終了しました。

$ net localgroup <管理者グループ> cron_admin /add
コマンドは正常に終了しました。

$
権限の付与

cygwinのeditrigntsコマンドで必要な権限を付与します。
想像ですが、サービスを起動するために必要な権限を付与しているように見えます。
その後、/etc/passwdファイルにcronサービス用ユーザのエントリを生成します。

$ editrights -a SeAssignPrimaryTokenPrivilege -u cron_admin
$ editrights -a SeCreateTokenPrivilege -u cron_admin
$ editrights -a SeIncreaseQuotaPrivilege -u cron_admin
$ editrights -a SeServiceLogonRight -u cron_admin
$ mkpasswd -l -u cron_admin >> /etc/passwd
$
セキュリティ上の理由で機能を制限します。

ローカルログインやネットワークからのログインができないようにします。

$ editrights -a SeDenyInteractiveLogonRight -u cron_admin
$ editrights -a SeDenyNetworkLogonRight -u cron_admin
$ editrights -a SeDenyRemoteInteractiveLogonRight -u cron_admin
$
サービスは登録しなおし

以前、登録していたサービスは、削除して再登録します。

$ cygrunsrv.exe --remove cron
$ cygrunsrv -I cron -d "Cygwin cron" -p /usr/sbin/cron -a -D -u cron_admin -w <パスワード>
$
しかし失敗...

コントロールパネルからサービスを起動するも、あえなく失敗...
しばらくイベントログの存在を忘れていましたが、今回は、役に立ちました。(いつもは期待を裏切られるのですが...)

cron: PID 2484: starting service `' failed: redirect_fd: open (1, /var/log/cron.log): 13, Permission denied

/var/log/cron.logを参照するとグループがSYSTEMでグループ以外書き込みできないファイルとなっていました。前回、登録したサービスでできたファイルなのでオーナに書き込み権限を付けようとしましたが...
Permission denied... オーナなのに... 削除もできないし... わけが分からん...

$ ls -l /var/log/cron.log
total 53
-r--rw-r--  1 <ユーザ> SYSTEM    73 Nov  8 23:12 cron.log

Windowsに戻ってC:\cygwin\var\log\cron.logを削除したら、あっさり消えました。

サービスの起動と確認

サービスを起動すると、今度はすんなり起動
実行を確認しました。

$ uname -a
CYGWIN_NT-6.0 mbook 1.5.25(0.156/4/2) 2007-12-14 19:21 i686 Cygwin
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.How72wJkjO installed on Sun Dec 23 17:51:32 2007)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* * * * * /usr/bin/date >> /tmp/date.log
$ tail -f /tmp/date.log
Mon Dec 24 23:05:01     2007
Mon Dec 24 23:06:02     2007
Mon Dec 24 23:07:01     2007
Mon Dec 24 23:08:02     2007