2012年4月15日日曜日

【php】mac os lion でphpを定期実行する

色々作っているうちに、phpファイルを定期的に実行したいと思うようになったので、試行錯誤した結果をメモ。


どうやって定期実行するのか?

「php 定期実行」と検索すると、cronというキーワードがよく引っかかる。mac os内にcronは標準で入っているのだが、cronはログオフやスリープ状態時には実行されないらしいので、mac os Xではcronではなくlaunchdを用いるのが推奨されている。そこで、今回はlaunchdを使った定期実行に挑戦する。

ちなみに、cronで定期実行する場合は、ターミナルで
$crontab -e
と入力するとvimエディタが起動するので、そこに「分 時 日 月 曜日 コマンド」を入力する。 例えば、
15 * * * * php test.php
だと、15分ごとにtest.phpが実行される。 入力後、保存を忘れないように。
 cronが設定されたかを確認するには、
$crontab -l

※ 私はこの方法で定期実行を実現することはできなかった。cron設定を入力し保存しても、なぜか保存されなかった。


launchdとは?

mac osで導入されている、デーモン実行プログラム(?)。 プログラムの定期実行だけでなく、「あるファイルが更新されたら」「ログインしたら」など様々な設定ができるらしい。


実装環境
  • Mac OS X Lion
  • Lingon 最新バージョン(たしか2.0.1?)

lanchdにおける定期実行の設定

launchdがどのように実行されているのか、実際どのようなファイルが書かれているのか、といった詳細については LaunchDaemons (launchctl, launchd.plist) の使い方 に書かれているので、こちらで勉強して頂きたい。 ここでは、とにかくlaunchdを用いて定期実行するだけの方法を説明します。
  1. phpファイルを用意
  2. lingonをダウンロード・インストール
  3. lingonを起動
    1. 左上のNewボタンをクリック
    2. Users Daemonsにチェックを入れCreate
    3. Name(たぶん適当で大丈夫)、What(「php test.php」など)、Whenを設定
    4. 左上のSaveをクリック
  4. OSを再起動

はまった点

 1. lingonを使用せずに、launchd.plist(/Library/LaunchDaemons/内に格納するファイル)を直接編集しようとしていたが、書き込み権限がないとか言って怒られ続けた。しかし、ファイルの権限を確認しても、ログインユーザは「読み/書き」になっていた。どう足掻いても無理だったので諦めた。

 2. lingonでphpファイルを設定する際、Whenを1分以内に設定してしまうと再起動時にうまくデスクトップが表示されなくなった。落ち着いて、画面上部をクリックすると各種アプリケーションを起動させることができたので、Finderから/Library/LanchDaemons/フォルダに移動し、Lingonで作成したファイルを削除することで解決した。

0 件のコメント:

コメントを投稿