Macでcrontab

定期的に特定のwebサイトを開くプログラムを書こうと思ったのです。
で、最初はJavascriptで書こうと思っていたのですが、それだと、そもそも、そのJavascriptが書かれたwebページを開いたままにしないといけないから、ブラウザが開いてないと動かないし、Javascriptって、設定をセーブするとか出来ないじゃん、つうことで断念。
でも、MacってUNIXだから、cronにスクリプトを登録すると、決まった時間にプログラムを動かせるじゃん!、って思ってちょっと調べてみた。
が、某所の情報では、現在はmacではcronは使われていなくって、launchdというコマンドにlaunchd.plistというものを登録するとか、そのlaunchd.plistを書くためにはXcodeに入っている"Property List Editor.app"を使わないといけないとか書かれていて、気が遠くなってしまった。
が、ダメもとで

crontab -e

ってやってみると、crontabは起動したのだが、インターネット上の情報では、macのcrontabを起動するとviが起動するって言われているのだが、私の場合、Emacsが起動した。
私のshellの環境設定で、環境変数"EDITOR"にEmacsが設定されていたかららしい。ので、viが嫌な人はEmacs環境変数"EDITOR"に登録すれば良い。
で、ちゃんと編集したつもりだったのだが、うまく動かない。
あきらめかけた時、Mac OSX用Cronエディター「Cronnix」を見つけた。
嬉しい事に、日本語対応だ。
で、

crontab -r

で、おかしな設定を消した後、

0 * * * * ~/web_timer.pl

と設定した。
これで、毎時0分にweb_timer.plが起動されればOKなのだが、、、期待通りちゃんと動いた!
web_timer.plの中身は

#!/usr/bin/perl

use Time::Local;

local $antenna = "http://a.hatena.ne.jp/ta-nuki/";
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
if($hour == 14){
 system("open -a firefox \"$antenna\"");
}
exit;

というもので、まだテスト段階なので1つしかURLが登録されていないけれども、時間に応じて別のURLを開くように書き換える予定。
system();は括弧内のコマンドを実行する命令。
つまり、このperlスクリプトは、

open -a firefox "http://a.hatena.ne.jp/ta-nuki/"

を実行しているだけである。
OpenコマンドはMacOS X特有のコマンドで、様々な事が出来るので詳しい事はググってもらうとして、
例えば

open "http://a.hatena.ne.jp/ta-nuki/"

で"http://a.hatena.ne.jp/ta-nuki/"をブラウザで開く事が出来る。
のだが、この場合はsafariで開いてしまうので、あえて -a というMacのアプリケーション起動引数を与えて、Firefoxで開いています。
この間、妹の旦那が「safari使わないんですか?」って聞いて来たが、safariに移行出来ないのはfirefoxのアドオンが充実し過ぎているから。
ということで、紆余曲折有ったものの、macでcrontabを利用して、定時にwebサイトを開くという事は出来そうで、あとは、何時にどのwebサイトを開くかをperlで作り込めば良いだけになりました。