$Id: README.jp,v 1.9 2007/10/30 03:44:31 nand Exp $
* cronwake は crontab のジョブに合わせて Mac OS X 10.3 マシンの
wakeup/poweron を行なうデーモンです
(http://homepage.mac.com/nand/macosx/cronwake.html も参照下さい)
/etc/crontab と /var/cron/tabs/ 以下の crontab ファイルを読み込み、
指定したジョブの実行前にマシンが sleep からの回復、または shut down からの
起動を行なうように制御します。root 権限で起動する必要があります。
コンパイルするには:
touch .depend
make depend
make
典型的な使い方:
1. cronwake をどこかにコピーします。例えば /usr/local/bin/cronwake
2. /etc/crontab に次のようなエントリを追加します。
@reboot root /usr/local/bin/cronwake
ただし、Mac OS X 10.5 では、各ユーザの crontab の場所が以前と変わっているので、
上のエントリに代えて次のように cronwake を起動してください
@reboot root /usr/local/bin/cronwake -u /usr/lib/cron/tabs
3. 再起動 (restart) します。
4. crontab を次のように変更します。
CRONWAKE=wake
0 6 * * * job1
CRONWAKE=wakepoweron
0 12 * * * job2
0 18 * * * job3
CRONWAKE=none
0 0 * * * job4
この例では、スリープしているマシンは 5:57,11:57,17:57 に wakeup します
(job1,job2,job3 の実行3分前)
shut down しているマシンは 11:55 と 17:55 に起動します (job2,job3 の5分前)
また、スリープしているマシンは 11:57 と 17:57 に起動します。
job4 の時刻はマシンの状態に影響を与えません。
もしこのプログラムをテストされる場合は、6 分以上後の wake ジョブを登録して
スリープさせるか、8 分以上後の wakepoweron ジョブを登録して shut down して
下さい。近い未来のジョブについては設定が行なわれません。
*note*
cronwake は cron の置換えではありません。 ジョブの実行は行ないません。
コマンドラインオプション:
cronwake [ -s system ] [ -S ] [ -u dir ] [ -U ] [ -p TTS ] [ -w n ] [ user ... ]
-s system : システム crontab ファイルのパス名 (デフォルト: /etc/crontab)
-S : システム crontab ファイルを読み込まない
-u dir : ユーザの crontab ディレクトリ (デフォルト: /var/cron/tabs)
-U : ユーザ crontab ファイルを読み込まない
-p TTS : スリープするために必要な時間 + 90 (秒) 120 以上でないといけない
(デフォルト: 120秒)
-D : foreground で実行し、標準エラー出力に verbose messages を出力する
(syslog を使わない)
-w n : 機種とOSの組合せに依存する不具合を回避する (*note1*)
user ... : ユーザ名のリスト (デフォルト: /var/cron/tabs にあるすべての
ファイルを読み込む)
crontab の環境変数設定:
CRONWAKE=wake
マシンをジョブの実行前にスリープから復帰させます。
(shut down しているマシンはそのままです)
CRONWAKE=wakepoweron
マシンをジョブの実行前に shut down 状態から起動します。
またはスリープから復帰させます。
CRONWAKE=poweron
マシンをジョブの実行前に shut down 状態から起動します。
(スリープしているマシンはそのままです)
CRONWAKE=none
ジョブに関して何も行ないません
CRONWAKE_WAKEBEFORE=<num>
スリープからの復帰をジョブの <num> 分前に設定します。
<num> は 1 以上でなければなりません
(デフォルト: 3 分)
CRONWAKE_POWERONBEFORE=<num>
shut down からの起動をジョブの <num> 分前に設定します。
<num> は 1 以上でなければなりません
(デフォルト: 5 分)
CRONWAKE_NOSLEEPFOR=<num>
CRONWAKE=wake または CRONWAKE=wakepoweron のジョブについて、
ジョブの実行時刻から <num> 分間、idle sleep を防止します。
<num> は 1 以上でなければなりません
(デフォルト: 1 分)
*note*
cronwake はユーザの指示したスリープ、shut down を防止できません。
もし時刻 T にユーザがマシンをスリープさせた場合、
Tjob - 60*CRONWAKE_WAKEBEFORE - TTS <= T <= Tjob
であれば、おそらく時刻 Tjob 以降のジョブを実行できないでしょう。
(TTS はコマンドラインオプション -p で指定した値 (デフォルト120秒) です)
もし時刻 T にユーザがマシンを shut down した場合、
Tjob - 60*CRONWAKE_POWERONBEFORE - TTS <= T <= Tjob
であれば、おそらく時刻 Tjob 以降のジョブを実行できないでしょう。
*note*
cronwake は /var/cron/tabs にあるファイルのうち、
ファイル名に '.' を含むものは読み込みません。
cronwake は /var/cron/tabs にあるファイルのファイル名が有効なユーザ名で
あるかどうかのテストを行ないません。
*WARNING*
このプログラムは daylight saving time を採用してる時間帯での動作については、
ほとんどテストされていません。
cronwake は crontab(1) や cron(8) よりも厳しく crontab(5) を検査するので、
次のような crontab は cronwake によって拒否されてしまいます。
10-60/20 * * * * echo test # 10-59/20 is acceptable by cronwake
10-5 * * * * echo test # meaningless...
もし cronwak が crontab のエントリを読むのに失敗すると、その crontab 全体が
無視されます。エラーメッセージが /var/log/system.log に出力されます。
(一つの crontab のエラーは他の crontab には影響しません。)
*既知の問題:
もし「システム環境設定」の「セキュリティ」で、スリープやスクリー
ンセーバーからの復帰時にパスワードを要求するように設定しておられたら、
スリープからの復帰時にパスワードを入力しないと30秒で再度スリープしてしまいます。
cronwake はこの場合のスリープを防止できませんので、正しく動きません。
(*note1*)
手元の iMac G5 (Boot ROM Version: 5.2.2f2, Mac OS X 10.3.6) では、
cronwake はスリープから復帰させることができません。
回避策: コマンドライオプションに -w 1 を指定して下さい。
ただし、これを指定した場合、cronwake は
wake イベントに代えて wakepoweron イベントを登録するようになります。
つまり、CRONWAKE=wake のジョブに対しても、
(ユーザの期待しない) 電源 ON を行なうようになります。
作者: Nozomu Ando <nand@mac.com>
nand@mac.com