Hatena::ブログ(Diary)

payapara

2009-06-26

cronをsuspend状態からでも、実行できるようにする。ubuntu 8.10

00:24

動機

linuxwindowsのようなタスク機能がない。

・cronはsuspend状態から実行できない。

・目覚まし機能をつけたい。

Rubyでいろいろしたい。

など...



準備


初めにやっておくこと

・復帰からのパスワード入力をなしにする。

% gconf-editor

apps↓

 gnome-power-manager↓

          lock

suspendのチェックをはずす。


PC復帰について

参考にさせってもらったサイト

PCを指定時刻に起動する

http://lostman-worlds-end.blogspot.com/2008/12/pc.html

PCのアラーム設定。

http://www.mythtv.org/wiki/ACPI_Wakeup#Using_.2Fsys.2Fclass.2Frtc.2Frtc0.2Fwakealarm

上記のサイトのおかげでsuspend状態からでも(多分shutdownからでも)

PCが復帰できました。



簡単に説明すると


$SECSに1970-01-01 00:00:00 UTC からの秒数を設定

echo 0 > /sys/class/rtc/rtc0/wakealarm アラームを初期化

echo $SECS > /sys/class/rtc/rtc0/wakealarm アラームを設定


これでだけでPCが復帰します。

しかし、パーミッション云々などの問題で私はハマりました。

そのため、スクリプトを作っておくといいです。


% vim alarm.sh



#!/bin/sh

if [ $# -ne 2 ];

then

echo usage:

echo $0 `date +%F" "%T`

exit

fi

SECS=`date -u --date "$1 $2" +%s`

echo 0 > /sys/class/rtc/rtc0/wakealarm

echo $SECS > /sys/class/rtc/rtc0/wakealarm

cat /proc/driver/rtc


alarm.shの使い方

% chmod 755 alarm.sh

% sudo ./alarm.sh 2009-06-26 12:45:00 ##時刻を直接設定

##現在の時刻の5分後に設定

% sudo ./alarm.sh `date +%F" "%T -d '+ 5 minutes'`

rtc_time : 22:05:01

rtc_date : 2009-06-27

alrm_time : 22:10:00  ## ここが表示されれば成功

alrm_date : 2009-06-27 ##

alarm_IRQ : yes

alrm_pending : no

24hr : yes

periodic_IRQ : no

update_IRQ : no

HPET_emulated : yes

DST_enable : no

periodic_freq : 1024

batt_status : okay

あとはPCが復帰するかsuspendしてテストしてみてください。




cronと連携

cronを実行するにはPCが動いていなければならないので、

Rubyを使って実行五分前に復帰できるようなプログラム

作りたいと思っていました。

http://bitbucket.org/shiro/cronwakeuprb/src/tip/cronWakeup.rb


あとはこれを実行するタイミングですが、

やはりsuspendをする前が絶妙です。

参考サイト http://www.revulo.com/blog/20090512.html

Ubuntu8.10では

% /etc/pm/sleep.d/

スクリプトを置いておくとsuspendやshutdown前にプログラムが実行されるようです。


ソースを入手と解凍

% wget -O cronWakeup.gz http://bitbucket.org/shiro/cronwakeuprb/get/tip.gz

% tar zxvf cronWakeup.gz

ファイル実行権限を変更

% cd cronwakeuprb/

% chmod 755 cronWakeup.rb

実行するスクリプトを置く

% cd /etc/pm/sleep.d/

% sudo vim 01-cron-suspend-alarm.sh

#!/bin/sh

/home/user/cronwakeuprb/cronWakeup.rb init

root権限で実行するように設定

% sudo chmod 755 01-cron-suspend-alarm.sh

% sudo chown root:root 01-cron-suspend-alarm.sh



cronWakeup.rbのについて

使い方

% sudo cronWakeup.rb init  #アラームを設定

% cronWakeup.rb list -l #アラーム時間を列挙

特定のプログラムしか復帰したくないという場合は

rootユーザーで分けると便利かもしれません。

% sudo crontab -e   #rootのcrontabを設定

設定...

% sudo cronWakeup.rb init -u root #rootのcrontabのみ復帰


問題

時間設定が完璧でない。

% crontab -e

でcronを設定できます。

0 18 * * *

は設定できますが、

範囲設定やリスト設定は使えません。

0 10-13 * * *

上記設定使えません。



今後

上記の問題を解決できたらいいなと思っています。

あとはリファクタリングしていきたいです。

何かご指摘あれば、よろしくお願いします。



その他

cronを駆使してamarokをコントロールするという

似たようなプログラムを発見しました。

http://www.arsoft-online.com/index.php?option=com_content&view=article&id=27:amarok-alarm&catid=26:alarm&Itemid=48

movadelsolmovadelsol 2016/06/26 23:58 cronWakeupの最新版はどこにありますか。よろしくお願いいたします。

トラックバック - http://d.hatena.ne.jp/payapara/20090626/1246029897