launchdで毎日同じ時刻にブログ投稿画面を表示させるようにした。

先の投稿で,日々一定時刻に投稿画面が表示されれば,日々のチェックポイントとしてブログを書くようになるのではないか,と考えた.そこで,OSXとFirefoxを使って,ある時刻にブログの投稿画面が表示されるようにした.

OSXで,ある時刻にアプリケーションを起動させる方法は2種類ある.

  • iCalのアラーム機能を利用する
  • OSXのプロセスを管理しているlaunchdを利用する

今回はlaunchdを利用する.その理由は,iCalのアラーム機能では特定のアプリケーション(FirefoxやSafari)をある時刻に起動することはできるが,そのアプリケーションで開くページやコンテンツを指定できない.正確には,ある時刻にapplescriptを起動させることが可能なので,applescriptの中でfirefoxを起動し,firefoxに対してあるURLを開かせる処理をさせられる.しかし,私の環境(Firefox 3.5 + OSX Leopard)では動作しなかった.

launchdは,UNIXでいうinitプロセスと同等である.UNIXではシステム起動時にinitプロセスを起動し,そのプロセスが各種デーモンの起動終了の面倒を見る.OSXではinitプロセスの代替として,launchdが用意されている.

今回の目的は,ある時刻にFirefoxを起動し,ブログ投稿ページを表示させることだ.そのため,まずFirefoxを起動し,ブログ投稿ページを表示させるスクリプトを用意する.次に,そのスクリプトをある時刻に起動するようlaunchdに設定する.

Firefoxをコマンドから起動させる場合は,Firefox以下Contents/MacOS/firefox-binを叩く.用意したスクリプトは以下.このスクリプトを,/Users/ryan5500/bin/invoke_firefox.shに配置した.一応chmod 755して起動可能な状態にしておく.

[shell]
#!/bin/sh
/Application/Firefox/Contents/MacOS/firefox-bin "http://www.ryan5500.com/post-new/"
[/shell]

次に,launchdに上記スクリプトを起動させるための設定を書く.用意した設定ファイルは以下.これを,~/Library/LaunchAgents/com.ryan5500.blog.checkpoint.startup.plistに配置した.LaunchAgentsというのは,Launchdが起動するがデーモンではなく,各ユーザーのために起動するものだ.すなわち,ryan5500ユーザーがログインしたときしか,下記のスクリプトは有効にならない,ということだ.

[xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ryan5500.blog.checkpoint.startup</string>
<key>Program</key>
<string>/Users/ryan5500/bin/invoke_firefox.sh</string>
<key>ProgramArguments</key>
<array>
<string></string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>18</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
</dict>
</plist>
[/xml]

この設定ファイルでは,用意したスクリプトを毎日18時10分に起動する.

この設定ファイルを~/Library/LaunchAgents以下に配置したからといって,設定は有効にならない.設定ファイルをlaunchdに読み込ませる処理が必要である.読み込ませるには,以下のコマンドを叩く.

[shell]
$launchctl load ~/Library/LaunchAgents/com.ryan5500.blog.checkpoint.startup.plist
[/shell]

きちんと読み込まれたか確認したい人は,以下のコマンドでcom.ryan5500.blog.checkpoint.startupが表示されるか見れば良い.

[shell]
$launchctl list
[/shell]

以上.これで毎日ブログ投稿画面が表示される環境が整った.ちゃんとブログを書くようになるだろうか.

参考にしたURLを以下に残す.
OSX 10.5 Leopardでcronを使う – 偏った言語信者の垂れ流し

http://d.hatena.ne.jp/nullpobug/20080611/1213196369

Undocumented Mac OS X:第1回 initを置き換えるlaunchd【前編】 (1/3) – ITmedia エンタープライズ

http://www.itmedia.co.jp/enterprise/articles/0704/26/news009.html

LaunchDaemons (launchctl, launchd.plist) の使い方 – maruko2 Note.

http://www.maruko2.com/mw/LaunchDaemons_%28launchctl,_launchd.plist%29_%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

Tags: , , , ,

Leave a Reply