cron.phpの自動実行

 PHPは受動的なサーバーサイドスクリプトのシステムですのでクライアントからのリクエストが発生しない限り,自発的に処理を始めることはありません.しかし,Moodleは,
といった処理を無人で自動的に処理する必要があります.これら一連のバックグラウンドで行う処理を記述したコマンドがcron.phpです.(moodle\admin\cron.php)

(1)Webブラウザでcron.phpを起動する.
 Webブラウザのアドレス欄に
http://localhost/admin/cron.php
と入力して下さい.一連の処理が自動実行されるはずです.いまは一瞬で終わりますが,コースの数が増えてくると処理する項目が徐々に増えていきます.
internal://xampp37.jpg

(2)コマンドラインでcron.phpを起動する.
 一般的に,この処理(cron.php)を5分間隔で行うことが推奨されています.Webブラウザを用いてcron.phpを5分間隔で実行するのは現実的な方法ではありません.cron.phpを自動実行するための手段は,いくつか存在します.ひとつは定期的にhttp://localhost/admin/cron.phpをHTTP手順で呼ぶ方法です.そのためのソフトウェアとしてWindows用にはMoodleCronというサービス型のプログラムが提供されています.ただ,このプログラムは(1)時々,動作に失敗する,(2)イベントログにメッセージが大量に残る,(3)Apacheを介するため処理が重い,という欠点があります.もう一つの方法は,サーバコンピュータ上で,cron.phpをダイレクトに実行する方法です.これにはC:\xampplite\phpフォルダ中のPHPの実行プログラムを利用します.
 コマンドプロンプトを開いて,以下のコマンドを実行して見て下さい.
c:\xampplite\php\php.exe -f c:\xampplite\moodle\admin\cron.php

internal://xampp38.jpg

 もしコマンドプロンプト内でcron.phpの処理結果が表示されたならば問題ありません.なお,c:\xampplite\phpフォルダ内には,php.exe,php-cgi.exe,php-win.exeの3つの実行形式があります.php.exeはコマンドラインでPHPを実行するためのもので,php-cgi.exeはCGIとして呼ばれることを前提とした実行形式です.これらはWindowsから起動された場合にコマンドプロンプトを自動的に開いて実行されますが,php-win.exeはコマンドプロンプトを開かずに(つまり画面表示を一切行わない)バックグラウンドで実行する実行形式です.

(3)cron.phpを一定時間周期で実行する.
 Windowsで,ユーザからの指示なしに自動的にプログラムを実行する仕組みとして,サービスとタスクの2種類があります.プログラムがサービスとして稼動するにはApahceやMySQLのようにサービスとしてバックグラウンドで動作することを前提として製作されたプログラムである必要があります.php.exe(あるいはphp-win.exe)はサービスとして動かすことができませんので,タスクとして登録します.
 (以下,管理者権限のアカウントでWindowsにログインしていると必要があります)
(注意) 以下の手順はWindowsXPの場合です.Windows2000やWindowsVIstaでは手順が異なるかも知れません.また,Windows98の場合はタスクスケジューラという同様の機能が実装されており,コントロールパネル内の[タスク]から設定できるようですが,機能がWindowsNT系列と同等かどうかは未確認です.
  1. [スタート]-[設定]-[コントロールパネル]でコントロールパネルを開いて下さい.
    internal://xampp39.jpg

    internal://xampp40.jpg

  2. コントロールパネル内のタスクをダブルクリックして下さい.現在,コンピュータに登録されているタスクの一覧が表示されます.

    internal://xampp41.jpg

  3. [スケジュールされたタスクの追加]をダブルクリックすると,タスクウィザードが起動します.

    internal://xampp42.jpg

  4. ”次へ”を選び,実行するプログラムを選択するのですが,ここにphp.exe(あるいはphp-win.exe)は含まれていません.

    internal://xampp43.jpg .

    そこで,”参照”をクリックして表示されるファイル選択ダイアログボックスで,C:\xampplite\phpフォルダ内のphp.exeを選びます.

    internal://xampp44.jpg

  5. 適当なタスクの名称(たとえばmoodle_cronなど)を入力し,”日単位”を選び,”次へ”をクリックします.

    internal://xampp45.jpg

  6. ”毎日”のまま,”次へ”をクリックします(開始時間は適当で構いません).

    internal://xampp46.jpg

  7. 管理者権限をもつユーザー名とパスワードを入力して,”次へ”をクリックして下さい.

    internal://xampp47.jpg

  8. ”[完了]をクリックした時に詳細プロパティを開く”,をチェックして,”完了”をクリックします.

    internal://xampp48.jpg

  9. 表示された詳細プロパティのウィンドウ中の実行するファイル名の欄に,先ほど選択したC:\xampplite\php\php.exeが入力されているはずです.この実行するファイルの右側に引数( -f c:\xampplite\moodle\admin\cron.php)を追加して,
     C:\xampplite\php\php.exe -f C:\xampplite\moodle\admin\cron.php
    とします.赤い文字列の部分が追加した引数です.必ず -f の前と後ろには半角空白を入れて下さい.

    internal://xampp49.jpg

  10. [スケジュール]のタブを選択してスケジュールタブを開き,[詳細設定]をクリックして[スケジュール オプションの詳細設定]画面を開きます.

    internal://xampp50.jpg

  11. ”タスクを繰り返し実行”のチェックボックスをチェックします.間隔を5分とし,”OK”をクリックします.これで毎日一回ではなく,コンピュータが起動している間は(誰もログオンしていなくても)5分間隔でタスクが実行されます.

    internal://xampp51.jpg

  12. [設定]タブを選択して設定タブを開き,”電源の管理”などの設定を好みに合わせて設定して下さい.もしデスクトップPCを使用しているのであればバッテリの残量を気にする必要はありませんが,ノートPCで試験的にMoodleを運用しているのであれば,バッテリ動作時に5分間隔でcron.phpが動き続けるとコンピュータを使用していない時もCPUが動いてしまいバッテリを消耗してしまうでしょう.

    internal://xampp52.jpg

  13. OKをクリックしてタスクの詳細プロパティを閉じます.パスワードを再度,入力するように催促された場合は入力して下さい.

    internal://xampp53.jpg

  14. 設定したタスクが正しく動くかどうか確認します.タスクのリストに追加したタスク(たとえばmoodle_cron)が存在するはずですので,右クリックしてコンテキストリストを表示し,”タスクの実行”を選択して下さい.

    internal://xampp54.jpg

  15. 一瞬,コマンドプロンプトが開いてcron.phpの実行結果が表示されればOKです.”前回の結果”が0x0ならば正常に動作しています.もし0x0ではない場合は引数の設定などが間違えています.

    internal://xampp55.jpg

  16. php.exeをタスクとすると,5分間隔でコマンドプロンプトが開きます.確実に5分間隔でcron.phpが起動されていることを確認するには都合が 良いのですが,確認後は邪魔であると感じると思います.そこでcron.phpを実行するプログラムをphp.exeからphp-win.exeに変更し ます.
     タスクリスト中のcron.phpを自動実行するタスク(たとえばmoodle_cron)を右クリックし,プロパティを選択すると,詳細プロパティのウィンドウが表示されます.”実行するファイル名”の欄のphp.exephp-win.exeに変更し,OKをクリックして詳細プロパティのウィンドウを閉じて下さい.

    internal://xampp56.jpg

  17. ファイル名の変更後,タスクのリストから目的のタスクを右クリックし,タスクの実行を選んで下さい.特に問題がなければ,前回の結果の欄は0x0のままのはずです.  
以上で,cron.phpをバックグラウンドで5分間隔で自動実行する設定は終了です.

(次へ: phpMyAdminのMoodleへの組み込み
作業手順に戻る)


[一つ前のページに戻る] [サイトマップに戻る]