戻る

Cygwinで便利!

今まで試してみたところ、Cygwin のどんなバージョンでもこの方法でうまくいきました。
一応 Cygwin 1.3.12 〜 1.3.22 で確認が出来ています。

また、このページでの作業は Administrators に所属しているユーザで
行うことを想定しています。
戻る

cron を使う

なぜ cron を使うのか

ある程度 Cygwin を使いこなしてきて、
自分でスクリプトなんかを書くようになってくると、
Cygwin 上のコマンドを自動実行したくなってきます。
Linux/UNIX で自動実行といえば cron ですので、
Cygwin 上でも cron を使えるようにしましょう。
# at は無くてもさほど問題ないでしょう。

ちなみに Windows 上の自動実行のためのものとして、
Windows NT / 2000 系 OS には (タスク) スケジューラというものが存在しますので、
PATHを通してうまく実行すれば実行できそうですが、
でも、何か不安ですし、やはり Cygwin の事は Cygwin でまかないましょう。

必要なパッケージのインストール

私のページのインストール方法を使用した人は
特に確認する必要はありませんが、
それ以外の方法でインストールした人は Cygwin 本体以外に
以下のパッケージをインストールしておく必要があるので確認してください。
インストールは Cygwin 標準の setup.exe から実施しましょう。
間違っても、 cron をソースから make したりしないでくださいね☆

PATH の設定

次にシステム環境変数の PATH の最後に
# [システムのプロパティ]-[詳細]タブ-[環境変数] から設定
C:\cygwin\usr\local\bin;C:\cygwin\bin
を追加しましょう。
# Cygwin のインストール場所は適宜読み替えてください。

これは cron 上から実行されるコマンドから、
任意の Cygwin 上のバイナリを使用できるようにするためです。
これを実施する副産物として、Windows 上のコマンドプロンプトからも、
Cygwin 上のバイナリが使用できるようになります。

逆に、Windows 上のコマンドプロンプトから、
Cygwin 上のバイナリを使用したくない場合は PATH の変更を実行しないでください。
この場合でも 「多分」 動くようにセットアップできますので、
# 試したことはありませんが、理論上は大丈夫だろうと思ってます。
これは好みと考えていただいてかまいません。

システム環境変数の変更は ユーザレベル にはすぐに反映されますが、
OS レベル (サービスとかは OS レベル) への反映は次回の起動時です。
トラブルを避けるためにもここで「再起動」してください。
トラブルを感じたくなければ面倒でも「再起動」です。

Windows 上のサービスにインストール

以上の準備が整ったら、cron を Windows 上のサービスにインストールしましょう。

PATH に設定をした場合は以下のコマンドを実行。
$ cygrunsrv -I cron -d "CYGWIN cron" \
> -p /usr/sbin/cron \
> -a -D -e "CYGWIN=ntsec nosmbntsec"

PATH に設定をしなかった場合は以下のコマンドを実行。
$ cygrunsrv -I cron -d "CYGWIN cron" \
> -p /usr/sbin/cron \
> -a -D -e "CYGWIN=ntsec nosmbntsec" \
> -e "PATH=/usr/local/bin:/usr/bin:/bin"
# 表示のために改行を用いながら入力してますが、
# 改行無しで一気に入力してもかまいません。


以上で、cron が "CYGWIN cron" という名前でサービスに登録されました。

実際につかう

cron を使う際に注意事項がいくつかあります。

まずはサービス自体がうまく起動できないとき。
一番ありがちなのはパーミッションの問題です。
/var/cron /var/log のパーミッションと
owner/groupを確認してください(もちろんその配下も)。
/var は、以下のように設定するのが良いでしょう。
drwxrwxrwt+   3 SYSTEM   admins         0 Feb  1 13:40 cron/
drwxrwxr-x+   5 SYSTEM   admins      4096 Feb  1 16:38 log/
drwxrwxr-x+   2 SYSTEM   admins         0 Feb  1 16:40 run/
'ls -l' で表示される属性の一番右に "+" がついているのは
owner / group / other の rwx で表示できる以外のアクセス権が
ついていることを示していて、大雑把にいうと
NTFS 上のアクセス権設定で SYSTEM アカウントに
アクセス権 (フルコントロール) がついているということです。
# 詳しく知りたい方は getfacl と setfacl を調べてください

ですので、まずは上記の二つのディレクトリに相当する
Windows 上のフォルダに対して、NTFS で SYSTEM アカウントに
フルコントロールのアクセス権を設定します。
その後、chown chmod で上記のようなアクセス権設定としましょう。
おそらく以上で起動できるようになると思います。


次はユーザが crontab からスケジュールを設定するときに
スケジュール設定が出来ない場合です。
この場合は、
/var/cron/deny /var/cron/allow を確認しましょう。


あとは、crontab からスケジュールを設定すれば幸せになれます。
戻る

cron を使わなくなったら

Windows 上のサービスからアンインストール

Cygwin をアンインストールするときや、
cron を使わなくなったときなどはサービスからアンインストールしましょう。

以下のコマンドでアンインストールができます。
$ cygrunsrv -R cron
サービスから名前が消えていることを確認してください。
Valid XHTML 1.0 Strict Valid CSS!
戻る