「Cron」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
(Ann2014 (トーク) による編集を jun shimizu による直前の版へ差し戻しました)
 
(3人の利用者による、間の87版が非表示)
1行目: 1行目:
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] 2008年6月27日 (金) 11:16 (CDT)
Cronでは、定期的なMoodleモジュールの実行を支援します。例えば、すべてのディスカッションフォーラムをチェックして、フォーラムをメール購読しているユーザに対して、新しい投稿のコピーをメール送信します。


Cronでは、定期的なMoodleモジュールの実行を支援します。For example, the cron process might tell Moodle to check all discussion forums so it can mail out copies of new posts to people who have subscribed to that forum.  
すべての処理を実行するMoodleの主要なスクリプトは、adminディレクトリに置かれ、cron.phpと呼ばれます。スクリプト自体は自分で動作することができませんので、あなたはスクリプトを定期的 (例 5分または10分毎) に実行する仕組みを設定する必要があります。それぞれのモジュールで定義された機能をスクリプトが実行できるよう、Cronは「心臓の鼓動 (hearbeat)」を提供します。この種の定期的なメカニズムは「Cronサービス」として知られています。サービスは、ウェブホストの一部、または異なるサーバまたはコンピュータで実行することができます。


The primary Moodle script that does all this is located in the admin directory, and is called cron.php. However, it can not tell itself to run, so you need to set up a mechanism where this script is run regularly (eg every five or ten minutes). This provides a "heartbeat" so that the script can perform functions at periods defined by each module. This kind of regular mechanism is known as a '''cron service'''. The service can be part of a webhost or can be something run from a different server or computer.
==Cronの概要==
===スクリプトの概要===


==Overview of cron==
cron.phpスクリプトは、Moodleのモジュールに関する、Moodleデータベース内のmdl_modulesテーブル (デフォルトのテーブル接頭辞が mdl_ と仮定して) を調べて、定期的にcron機能が実行されるようにします。そして、それぞれのモジュールディレクトリ内にあるlib.phpファイルから「モジュール名_cron」の関数を探して、実行します。また、mdl_blockテーブルを調べて、cronメソッド (オブジェクト関数) が定期的に実行されるようにします。そして、それぞれのブロックから、そのブロックに関係する新しいオブジェクトのため、cronメソッドを実行します (プログラマーではない人のため、私は詳細説明を省略しています。プログラマーは、自分で admin/cron.phpを読めますから)。これらのファイル (lib.phpファイルおよびブロックのクラスが定義されているファイル) には、クリーンアップ機能、メール機能および定期的に実行する必要な機能を組み込むことができます。例えば、「管理 > コースバックアップ」で指定された時間にコースバックアップを作成するため、cronはシステムにトリガー (きっかけ) を与えます。また、cronはメッセージモジュールまたはフォーラム投稿通知に対してトリガーを与えますが、cronが実行されるたび、すべての機能がコールされるわけではありません。長期間ログインしていない学生の削除、古いログファイルの削除等、いくつかの機能は時々実行されるだけです。cron.phpファイルには、cron実行の1/5の割合で、これらのコアタスクをランダムに実行するためのセクションがあります。
===Script overview===


The cron.php script looks through the mdl_modules table (assuming the default table prefix is mdl_) in the Moodle database for modules scheduled to have their cron functions run; it then looks in each such module directory for a function called module-name_cron in the lib.php file and runs it.  It also looks through the mdl_block table for blocks scheduled for their cron methods (object functions) to be run; it then, for each such block, runs the cron method for a new object associated with that block (I'm omitting details for the benefit of non-programmers; programmers can read admin/cron.php for themselves). These files (the lib.php files and the files where the block classes are defined) can contain cleanup functions, email functions or anything that needs to be run on a regular basis. For example, cron will trigger the system to create the backups of courses at the time specified in the administration settings. It also triggers any messaging module or forum email notifications, but not all functions are called each time the cron runs. Some functions, such as unenrolling students who have not logged in or deleting old copies of log files, are only run occasionally. The cron.php file has a section which will randomly call these core tasks approximately 1 in 5 times the cron runs.
===Cronサービスロケーションおよびタイミング===
cronを実行するコンピュータは、 '''Moodleが動作しているコンピュータと同じである必要はありません'''。例えば、あなたがcronを動作できないような、サービスを制限したウェブホスティングサービスを利用している場合、他のサーバまたはあなたの自宅のコンピュータでcronを実行させることができます。大切なことは、cron.phpが定期的に実行されることだけです。


===Cron service location and timing===
このスクリプトのロードは、それほど高くありません。ですから、5分毎に動作させるのが適切です。あなたが5分毎のcron.phpの動作に心配な場合、15分毎または30分毎に動作間隔を延ばすこともできます。メール送信の遅れにより、コース内の活動をスローダウンしてしまうこともありますので、cron.phpの動作間隔を伸ばしすぎない方が良いでしょう。cron.phpによるメール送信は、「サイト管理 > セキュリティ > サイトポリシー」の「投稿を編集できる最大時間」に影響されることを記憶に留めてください。
Note that the machine performing the cron '''does not need to be the same machine that is running Moodle'''. For example, if you have a limited web hosting service that does not have a cron service, then you might choose to run cron on another server or on your home computer. All that matters is that the cron.php file is called regularly.


The load of this script is not very high, so 5 minutes is usually reasonable, but if you're worried about it you can reduce the time period to something like 15 minutes or even 30 minutes. It's best not to make the time period too long, as delaying mail-outs can slow down activity within the course. Remember that mail-outs also wait for the editing time to expire before being queued for sending.
===Cronのテストおよびマニュアルトリガー===


===Testing cron and manual trigger===
あなたのブラウザから直接スクリプトが動作できるか、最初にテストしてください: ''<nowiki>http://example.com/moodle/admin/cron.php</nowiki>''


First, test that the script works by running it directly from your browser: ''<nowiki>http://example.com/moodle/admin/cron.php</nowiki>''
あなたのMoodleにログインしているユーザから、コマンドラインでcronが実行された場合、cronを実行するため、一時的に管理者環境が作成され、そのユーザはログアウトされます。cron.phpファイルを無効にすることで、コマンドラインによるcron.php実行を停止することができます。


If cron is called from the command line by any user logged in to your Moodle it will create a temporary admin environment in order to run and then log the user out. You can disable command line running of cron by disabling the appropriate section in the cron.php file.
cron.phpを無効にした場合、自動的かつ定期的にcron.phpが実行される環境を設定する必要があります。


Now, you need to set up some of way of running the script automatically and regularly.
==WindowsシステムのCron管理==


==Managing Cron on Windows systems==
WindowsシステムでMoodleのcron.phpを設定するには、異なる2つの方法があります:


There are two different ways for setting-up Moodle cron.php on Windows systems:
*'''Moodle Cronパッケージを使用する''' 最も簡単な方法は、Moodleに関するWindowsサービスをインストールしてくれる、この小さなパッケージ「[http://download.moodle.org/download.php/sourceforge/MoodleCron-Setup.exe MoodleCron-Setup.exe]」を使用することです。このパッケージを実行した後は、すべて忘れましょう!
 
*'''スケジュールタスクを使用する''' あなたがWindowsスケジューラを使用したい場合、またはmoodle-cron-for-windowsパッケージに問題がある場合、スケジュールタスクを設定することで、Windows用のwgetを使用するか、コマンドラインでphpを使用することができます。以下の手順に従ってください:
*Use the '''Moodle Cron package'''. The simplest way is to use this little package [http://download.moodle.org/download.php/sourceforge/MoodleCron-Setup.exe MoodleCron-Setup.exe], which makes this whole thing very easy by installing a small Windows service. Run it and forget about it! :-)
** '''php.exe/php-win.exe (コマンドラインバイナリ)''' または '''wget''' を選択する。
*Use a '''Scheduled Task'''. If you prefer to use the built-in Windows Scheduler or are having trouble with moodle-cron-for-windows package, you can use wget for windows or php from the command line and setup a scheduled task. Just follow these steps:
::あなたのphpフォルダ (例. c:\php) にインストールされているphp.exeまたはphp-win.exeバイナリ (PHP version 5以降) は、cronスクリプトの動作に対して良いパフォーマンスをもたらします。
** Choose either the '''php.exe/php-win.exe (command line binary)''' or '''wget'''
::あなたがwgetを使用したい場合、Windows用wgetのコンパイル済みバージョンを、オリジナルのGNU Win32 ports (http://unxutils.sourceforge.net/)、Heiko Herold's windows wget spot (http://xoomer.virgilio.it/hherold/) または Bart Puype氏のWGET for Windows (win32) ページ (http://users.ugent.be/~bpuype/wget/) からダウンロードしてください。あなたがHeiko Herold氏のパッケージを使用している場合、すべてのDLLファイルを「C:\Windows\system32」ディレクトリにコピーしてください。そして、wget.exeファイルを「c:\windows」ディレクトリにコピーしてください (このことにより、wgetを常にサーチパスに置きます)
::The php.exe or php-win.exe binary (for PHP version 5 or later) is installed in your php folder (e.g. c:\php) will give you better performance when running the cron script.
:* '''Scheduled Task''' を設定する。
::If you want to use wget, download a compiled version of wget for windows from the native GNU Win32 ports (http://unxutils.sourceforge.net/), from Heiko Herold's wget for windows page (http://xoomer.virgilio.it/hherold/) or Bart Puype's wget for windows page (http://users.ugent.be/~bpuype/wget/). If you use Heiko Herold's package, copy all of the .DLL files to your C:\Windows\system32 directory. Copy the wget.exe file to c:\windows (this makes sure wget is always in the search path).
:: - 「スタート >> コントロールパネル >> タスク >> コントロールされたタスクの追加」へ移動してください。
:* Setup a '''Scheduled Task'''.
:: - ウィザードを開始するには、「次へ (N) >」をクリックしてください。
:: - Go to Start >> Control Panel >> Scheduled Tasks >> Add Scheduled Task.
:: - 「参照 (R) ...」ボタンをクリックして、 c:\php\php.exe または c:\windows\wget.exe を選択した後、「開く (O)」をクリックしてください。
:: - Click "Next" to start the wizard:
:: - タスク名に「Moodle Cron」と入力して、タスクの実行に「日単位 (D)」を選択した後、「次へ (N) > 」をクリックしてください。
:: - Click in the "Browse..." button and browse to c:\php\php.exe or c:\windows\wget.exe and click "Open"
:: - 開始時刻で「12:00」を選択して、このタスクの実行に「毎日 (A)」を選択してください。開始日に今日の日付を選択した後、「次へ (N) > 」をクリックしてください。
:: - Type "Moodle Cron" as the name of the task and select "Daily" as the schedule. Click "Next".
:: - タスクを実行するユーザ名およびパスワードを入力してください (管理者権限を持つアカウントである必要はありません)。パスワードを正しく入力したことを確認して、「次へ (N) > 」をクリックしてください。
:: - Select "12:00 AM" as the start time, perform the task "Every Day" and choose today's date as the starting date. Click "Next".
:: - 「[完了]をクリックしたときに詳細プロパティを開く (A)」をチェックして、「完了」ボタンをクリックしてください。
:: - Enter the username and password of the user the task will run under (it doesn't have to be a priviledged account at all). Make sure you type the password correctly. Click "Next".
:: - 「スタート >> ファイル名を指定して実行 (R) ...」を選択した後、テキストボックスに次のコマンドを入力してください: <pre>c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php</pre> または <pre>c:\php\php-win.exe -f c:\moodle\admin\cron.php</pre> あなたのMoodleディレクトリと「c:\moodle」を入れ替えるか、あなたのサイト名「my.moode.site」を入力してください。<br><br>
:: - Mark the checkbox titled "Open advanced properties for this task when I click Finish" and click "Finish".
:: - 「スケジュール」タブをクリックして、「詳細設定 (V) ...」ボタンをクリックしてください。
:: - In the new dialog box, type the following in the "Run:" text box: <pre>c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php</pre> or <pre>c:\php\php-win.exe -f c:\moodle\admin\cron.php</pre> Replace "c:\moodle" with the path to your moodle directory or "my.moode.site" with the name of your site.<br><br>
:: - 「タスクを繰り返し実行 (R)」チェックボックスをチェックして、「間隔 (V)」に5分、「継続期間 (D)」に23時間59分を設定してください。
:: - Click on the "Schedule" tab and there in the "Advanced..." button.
:: - 「OK」ボタンを2回クリックして、完了です。
:: - Mark the "Repeat task" checkbox and set "Every:" to 5 minutes, and set "Until:" to "Duration" and type "23" hours and "59" minutes.
* '''あなたのスケジュールタスクをテストする''' 登録したタスクにマウスポインタを合わせて右クリック、「タスクの実行 (U)」をクリックすることで、あなたはスケジュールタスクが正常に動作するかどうか確認することができます。すべてが正常にセットアップされている場合、wget/php実行中、一時的にDOSウィンドウが表示された後、消えます。タスクフォルダをリフレッシュすることで、現在の時間を反映した「前回の実行時間」 (詳細 (D) フォルダ表示) が表示され、「前回の結果」カラムには「0x0」 (すべてOK) が表示されます。どちらかの表示が異なる場合、あなたのセットアップ内容を再度確認してください。
:: - Click "OK" and you are done.
* '''cronアウトプットを記録する''' cronジョブがエラーを出している場合、バックアップが完了しない場合、ユーザのフォーラム購読メールが遅延する場合、cronスクリプトの実行時のアウトプットを記録してください。cronアウトプットを記録するためには、コマンドがphp.exeを使用し、アウトプットがファイル (c:\moodle\admin\cron.log) に記録されるよう合わせてください。以下、php.exeコマンドの例です:
* '''Test your scheduled task'''. You can test that your scheduled task can run successfully by clicking it with the right button and chosing "Run". If everything is correctly setup, you will briefly see a DOS command window while wget/php executes and fetches the cron page and then it disappears. If you refresh the scheduled tasks folder, you will see the ''Last Run Time column'' (in detailed folder view) reflects the current time, and that the Last Result column displays "0x0" (everything went OK). If either of these is different, then you should recheck your setup.
* '''Logging cron output'''. You may want to log the output of the cron script as it executes, in case you see the job is producing errors, backups are not being completed or users are experiencing delays in receiving forum emails. To do this, adjust the command so that it uses the php.exe and stores the output in a file called (for example c:\moodle\admin\cron.log). Here is an example of the php.exe command:
<pre>c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log</pre>
<pre>c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log</pre>


==Managing cron on web hosting services==
==ウェブホスティングサービスのCron管理==


Your web-based control panel may have a web page that allows you to set up a cron service process.
ウェブホスティングでは、多くの場合、ウェブベースのコントロールパネルでcronサービスを設定することができます。


===CPanel cron service===
===CPanelのCronサービス===
If you are using CPanel, login then look for "Advanced" category towards the bottom of the page. Click on Cron Jobs -> Advanced (Unix style). Enter the following for the cron to run every 30 minutes.
あなたがcPanelを使用している場合、ログイン後、ページ下部の「Advanced」を確認してください。そして、「Cron Jobs -> Advanced (Unix style)」をクリックします。 cronが30分ごとに動作するよう、以下の内容を入力してください。


  Email address for output: emailaddress@mydomain.con
  Email address for output: emailaddress@mydomain.con
63行目: 61行目:
  <nowiki>Command: wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php</nowiki>
  <nowiki>Command: wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php</nowiki>


Click Commit Changes. Check your email for the output.
「Commit Changes」をクリックしてください。あなたのメールに送信されるcronの動作状況を確認してください。
 
[[Image:Cpanel-cron-setup.JPG]]
[[Image:Cpanel-cron-setup.JPG]]


===Other systems cron service===
===他のシステムのCronサービス===
For other systems, look for a button called "Cron jobs". In there you can put the same sort of Unix commands as listed below.
他のシステムでは、「Cron jobs」のようなボタンを探してください。そこでは、以下のUnixコマンドと同じようなコマンドを設定することができます。




If you don't have permissions to run the 'wget' command on the server, you can use this php command:
あなたにサーバでwgetコマンドを実行するパーミッションがない場合、このphpコマンドを使用することができます:


  /usr/local/bin/php -q /real/path/to/script/admin/cron.php
  /usr/local/bin/php -q /real/path/to/script/admin/cron.php


For example:  
例えば:  


  /usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php
  /usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php


If you don't know what is the real path of your Moodle folder you can use the PHP command realpath.
あなたのMoodleフォルダへの実パスが分からない場合、PHPの「realpath() 関数」を使用することができます。
 
もうひとつの方法、あなたにサーバでwgetコマンドを実行するパーミッションがない場合、curlコマンドを使用することができます。


Another alternative, if you do not have permission to run the 'wget' command, may be to use a curl command.
'''Note:moodle 2.0以降、コマンドラインで実行するcron.phpのパスが変更されました。コマンドラインで実行する場合のパスは/admin/cli/cron.phpとなります。'''


For example:
例えば:


curl --silent --compressed http://mydomain.com/moodle/admin/cron.php
curl --silent --compressed <nowiki>http://mydomain.com/moodle/admin/cron.php</nowiki>


==Using a cron command line in Unix==
==UnixのコマンドラインでCronを使用する==


There are different command line programs you can use to call the page from the command line. Not all of them may be available on a given server.
あなたがコマンドラインからページをコールするため、異なるコマンドラインプログラムがあります。サーバにより、実行できないプログラムもあります。


For example, you can use a Unix utility like 'wget':
例えば、あなたは「wget」のようなUnixユーティリティを使用することができます:


  wget -q -O /dev/null <nowiki>http://example.com/moodle/admin/cron.php</nowiki>
  wget -q -O /dev/null <nowiki>http://example.com/moodle/admin/cron.php</nowiki>


Note in this example that the output is thrown away (to /dev/null).
この例では、アウトプットは (/dev/null ) 破棄されます。


A number of users of Moodle have found that 'wget' sometimes fails. Especially if you have trouble with email digests not being sent on a daily basis to all users, an alternative command that solves the problem is:
多くのMoodleユーザにより、「wget」が時々動作不良を起こすと報告されています。特にフォーラムから毎日メール要約がすべてのユーザに送信されない場合、代わりのコマンドで問題を解決することができます。


  php <nowiki>http://example.com/moodle/admin/cron.php</nowiki>
  php <nowiki>http://example.com/moodle/admin/cron.php</nowiki>


The same thing using lynx:
同じくlynxを使用すると:


  lynx -dump <nowiki>http://example.com/moodle/admin/cron.php</nowiki> > /dev/null
  lynx -dump <nowiki>http://example.com/moodle/admin/cron.php</nowiki> > /dev/null


Note in this example that the output is thrown away (to /dev/null).
この例では、アウトプットは (/dev/null ) 破棄されます。


Alternatively you could use a standalone version of PHP, compiled to be run on the command line. The advantage with doing this is that your web server logs aren't filled with constant requests to cron.php. The disadvantage is that you need to have access to a command-line version of php.
代わりにコマンドラインで実行するようコンパイルされた、スタンドアロンバージョンのPHPを使用することもできます。このPHPを使用するメリットは、あなたのウェブサーバのログがcron.phpの連続したリクエストで一杯にならないことです。このPHPを使用するデメリットは、コマンドラインバージョンのPHPにアクセスしなければならないことです。


  /opt/bin/php /web/moodle/admin/cron.php
  /opt/bin/php /web/moodle/admin/cron.php


===Using the crontab program on Unix===
===Unixのcrontabプログラムを使用する===


All that Cpanel does is provide a web interface to a Unix utility known as crontab. If you have a command line, you can set up crontab yourself using the command:
Cpanelでは、crontabとして知れられているUnixユーティリティのウェブインターフェースを提供します。あなたがコマンドラインを使用できる場合、コマンドを使用して、自分でcrontabを設定することができます。


  crontab -e
  crontab -e


and then adding one of the above commands like:
そして、前述「Cron Jobs -> Advanced (Unix style)」の内容を次のように追加します:


  */30 * * * * wget -q -O /dev/null <nowiki>http://example.com/moodle/admin/cron.php</nowiki>
  */30 * * * * wget -q -O /dev/null <nowiki>http://www.mydomain.com/moodle/admin/cron.php</nowiki>


The first five entries are the times to run values, followed by the command to run. The asterisk is a wildcard, indicating any time. The above example means run the command ''wget -q -O /dev/null...'' every 30 minutes (*/30), every hour (*), every day of the month (*), every month (*), every day of the week (*).
最初の5つのエントリは、それに続くコマンドを実行するための時間の値です。アスタリスク (*) は、常時を意味するワイルドカードです。上記例では、コマンド「wget -q -O /dev/null...」を30分毎 (*/30)、毎時 (*)、毎日 (*)、毎月 (*)、すべての曜日 (*) に実行します。


The "O" of "-O" is the capital letter not zero, and refers the output file destination, in this case "/dev/null" which is a black hole and discards the output. If you want to see the output of your cron.php then enter its url in your browser.  
-O」の「O」は、ゼロではなく、アウトプット先を示す大文字のO (オー) です。この例の場合、アウトプットを破棄するブラックホール「dev/null」をアウトプット先としています。あなたがcron.phpのアウトプットを表示したい場合、ブラウザにURIを直接入力してください。


* [http://linuxweblog.com/node/24 A basic crontab tutorial]  
* [http://linuxweblog.com/node/24 A basic crontab tutorial] - 英語
* [http://www.freebsd.org/cgi/man.cgi?query=crontab&apropos=0&sektion=5&manpath=FreeBSD+6.0-RELEASE+and+Ports&format=html Online version of the man page]  
* [http://www.freebsd.org/cgi/man.cgi?query=crontab&apropos=0&sektion=5&manpath=FreeBSD+6.0-RELEASE+and+Ports&format=html Online version of the man page] - 英語


For '''beginners''', "EDITOR=nano crontab -e" will allow you to edit the crontab using the [http://www.nano-editor.org/dist/v1.2/faq.html nano] editor. Ubuntu defaults to using the nano editor.
あなたが「初心者」の場合、「EDITOR=nano crontab -e」コマンドにより、[http://www.nano-editor.org/dist/v1.2/faq.html nano]エディタを使用して、crontabを編集することができます。Ubuntuでは、nanoエディタをデフォルトのエディタとしています。


Usually, the "crontab -e" command will put you into the 'vi' editor. You enter "insert mode" by pressing "i", then type in the line as above, then exit insert mode by pressing ESC. You save and exit by typing ":wq", or quit without saving using ":q!" (without the quotes). Here is an [http://www.unix-manuals.com/tutorials/vi/vi-in-10-1.html intro] to the 'vi' editor.
通常、「crontab -e」コマンドでは、viエディタが起動されます。「i」キーを押すことで、挿入モードに入ります。前述のコマンドラインを入力して、ESCキーを押すことで、挿入モードから抜けます。「wq」とタイプすることで、あなたは内容を保存して、viエディタを終了させることができます。または、「q!」とタイプすることで、内容を保存せずに、viエディタを終了させることができます。viエディタに関する[http://www.unix-manuals.com/tutorials/vi/vi-in-10-1.html イントロダクション (英語) は、こちらをご覧ください]


==関連情報==
==関連情報==


Using Moodle forum discussions:
Using Moodleフォーラムディスカッション (英語):
*[http://moodle.org/mod/forum/discuss.php?d=41827 Cron - can someone give me a quick confirmation of function?]
*[http://moodle.org/mod/forum/discuss.php?d=41827 Cron - can someone give me a quick confirmation of function?]
*[http://moodle.org/mod/forum/discuss.php?d=97684 Cronjob Question]
*[http://moodle.org/mod/forum/discuss.php?d=97684 Cronjob Question]

2016年3月9日 (水) 15:01時点における最新版

Cronでは、定期的なMoodleモジュールの実行を支援します。例えば、すべてのディスカッションフォーラムをチェックして、フォーラムをメール購読しているユーザに対して、新しい投稿のコピーをメール送信します。

すべての処理を実行するMoodleの主要なスクリプトは、adminディレクトリに置かれ、cron.phpと呼ばれます。スクリプト自体は自分で動作することができませんので、あなたはスクリプトを定期的 (例 5分または10分毎) に実行する仕組みを設定する必要があります。それぞれのモジュールで定義された機能をスクリプトが実行できるよう、Cronは「心臓の鼓動 (hearbeat)」を提供します。この種の定期的なメカニズムは「Cronサービス」として知られています。サービスは、ウェブホストの一部、または異なるサーバまたはコンピュータで実行することができます。

Cronの概要

スクリプトの概要

cron.phpスクリプトは、Moodleのモジュールに関する、Moodleデータベース内のmdl_modulesテーブル (デフォルトのテーブル接頭辞が mdl_ と仮定して) を調べて、定期的にcron機能が実行されるようにします。そして、それぞれのモジュールディレクトリ内にあるlib.phpファイルから「モジュール名_cron」の関数を探して、実行します。また、mdl_blockテーブルを調べて、cronメソッド (オブジェクト関数) が定期的に実行されるようにします。そして、それぞれのブロックから、そのブロックに関係する新しいオブジェクトのため、cronメソッドを実行します (プログラマーではない人のため、私は詳細説明を省略しています。プログラマーは、自分で admin/cron.phpを読めますから)。これらのファイル (lib.phpファイルおよびブロックのクラスが定義されているファイル) には、クリーンアップ機能、メール機能および定期的に実行する必要な機能を組み込むことができます。例えば、「管理 > コースバックアップ」で指定された時間にコースバックアップを作成するため、cronはシステムにトリガー (きっかけ) を与えます。また、cronはメッセージモジュールまたはフォーラム投稿通知に対してトリガーを与えますが、cronが実行されるたび、すべての機能がコールされるわけではありません。長期間ログインしていない学生の削除、古いログファイルの削除等、いくつかの機能は時々実行されるだけです。cron.phpファイルには、cron実行の1/5の割合で、これらのコアタスクをランダムに実行するためのセクションがあります。

Cronサービスロケーションおよびタイミング

cronを実行するコンピュータは、 Moodleが動作しているコンピュータと同じである必要はありません。例えば、あなたがcronを動作できないような、サービスを制限したウェブホスティングサービスを利用している場合、他のサーバまたはあなたの自宅のコンピュータでcronを実行させることができます。大切なことは、cron.phpが定期的に実行されることだけです。

このスクリプトのロードは、それほど高くありません。ですから、5分毎に動作させるのが適切です。あなたが5分毎のcron.phpの動作に心配な場合、15分毎または30分毎に動作間隔を延ばすこともできます。メール送信の遅れにより、コース内の活動をスローダウンしてしまうこともありますので、cron.phpの動作間隔を伸ばしすぎない方が良いでしょう。cron.phpによるメール送信は、「サイト管理 > セキュリティ > サイトポリシー」の「投稿を編集できる最大時間」に影響されることを記憶に留めてください。

Cronのテストおよびマニュアルトリガー

あなたのブラウザから直接スクリプトが動作できるか、最初にテストしてください: http://example.com/moodle/admin/cron.php

あなたのMoodleにログインしているユーザから、コマンドラインでcronが実行された場合、cronを実行するため、一時的に管理者環境が作成され、そのユーザはログアウトされます。cron.phpファイルを無効にすることで、コマンドラインによるcron.php実行を停止することができます。

cron.phpを無効にした場合、自動的かつ定期的にcron.phpが実行される環境を設定する必要があります。

WindowsシステムのCron管理

WindowsシステムでMoodleのcron.phpを設定するには、異なる2つの方法があります:

  • Moodle Cronパッケージを使用する 最も簡単な方法は、Moodleに関するWindowsサービスをインストールしてくれる、この小さなパッケージ「MoodleCron-Setup.exe」を使用することです。このパッケージを実行した後は、すべて忘れましょう!
  • スケジュールタスクを使用する あなたがWindowsスケジューラを使用したい場合、またはmoodle-cron-for-windowsパッケージに問題がある場合、スケジュールタスクを設定することで、Windows用のwgetを使用するか、コマンドラインでphpを使用することができます。以下の手順に従ってください:
    • php.exe/php-win.exe (コマンドラインバイナリ) または wget を選択する。
あなたのphpフォルダ (例. c:\php) にインストールされているphp.exeまたはphp-win.exeバイナリ (PHP version 5以降) は、cronスクリプトの動作に対して良いパフォーマンスをもたらします。
あなたがwgetを使用したい場合、Windows用wgetのコンパイル済みバージョンを、オリジナルのGNU Win32 ports (http://unxutils.sourceforge.net/)、Heiko Herold's windows wget spot (http://xoomer.virgilio.it/hherold/) または Bart Puype氏のWGET for Windows (win32) ページ (http://users.ugent.be/~bpuype/wget/) からダウンロードしてください。あなたがHeiko Herold氏のパッケージを使用している場合、すべてのDLLファイルを「C:\Windows\system32」ディレクトリにコピーしてください。そして、wget.exeファイルを「c:\windows」ディレクトリにコピーしてください (このことにより、wgetを常にサーチパスに置きます)。
  • Scheduled Task を設定する。
- 「スタート >> コントロールパネル >> タスク >> コントロールされたタスクの追加」へ移動してください。
- ウィザードを開始するには、「次へ (N) >」をクリックしてください。
- 「参照 (R) ...」ボタンをクリックして、 c:\php\php.exe または c:\windows\wget.exe を選択した後、「開く (O)」をクリックしてください。
- タスク名に「Moodle Cron」と入力して、タスクの実行に「日単位 (D)」を選択した後、「次へ (N) > 」をクリックしてください。
- 開始時刻で「12:00」を選択して、このタスクの実行に「毎日 (A)」を選択してください。開始日に今日の日付を選択した後、「次へ (N) > 」をクリックしてください。
- タスクを実行するユーザ名およびパスワードを入力してください (管理者権限を持つアカウントである必要はありません)。パスワードを正しく入力したことを確認して、「次へ (N) > 」をクリックしてください。
- 「[完了]をクリックしたときに詳細プロパティを開く (A)」をチェックして、「完了」ボタンをクリックしてください。
- 「スタート >> ファイル名を指定して実行 (R) ...」を選択した後、テキストボックスに次のコマンドを入力してください:
c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php
または
c:\php\php-win.exe -f c:\moodle\admin\cron.php
あなたのMoodleディレクトリと「c:\moodle」を入れ替えるか、あなたのサイト名「my.moode.site」を入力してください。

- 「スケジュール」タブをクリックして、「詳細設定 (V) ...」ボタンをクリックしてください。
- 「タスクを繰り返し実行 (R)」チェックボックスをチェックして、「間隔 (V)」に5分、「継続期間 (D)」に23時間59分を設定してください。
- 「OK」ボタンを2回クリックして、完了です。
  • あなたのスケジュールタスクをテストする 登録したタスクにマウスポインタを合わせて右クリック、「タスクの実行 (U)」をクリックすることで、あなたはスケジュールタスクが正常に動作するかどうか確認することができます。すべてが正常にセットアップされている場合、wget/php実行中、一時的にDOSウィンドウが表示された後、消えます。タスクフォルダをリフレッシュすることで、現在の時間を反映した「前回の実行時間」 (詳細 (D) フォルダ表示) が表示され、「前回の結果」カラムには「0x0」 (すべてOK) が表示されます。どちらかの表示が異なる場合、あなたのセットアップ内容を再度確認してください。
  • cronアウトプットを記録する cronジョブがエラーを出している場合、バックアップが完了しない場合、ユーザのフォーラム購読メールが遅延する場合、cronスクリプトの実行時のアウトプットを記録してください。cronアウトプットを記録するためには、コマンドがphp.exeを使用し、アウトプットがファイル (例 c:\moodle\admin\cron.log) に記録されるよう合わせてください。以下、php.exeコマンドの例です:
c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log

ウェブホスティングサービスのCron管理

ウェブホスティングでは、多くの場合、ウェブベースのコントロールパネルでcronサービスを設定することができます。

CPanelのCronサービス

あなたがcPanelを使用している場合、ログイン後、ページ下部の「Advanced」を確認してください。そして、「Cron Jobs -> Advanced (Unix style)」をクリックします。 cronが30分ごとに動作するよう、以下の内容を入力してください。

Email address for output: emailaddress@mydomain.con
Minute:*/30
Hour:*
Day:*
Month:*
Weekday:* 
Command: wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php

「Commit Changes」をクリックしてください。あなたのメールに送信されるcronの動作状況を確認してください。 Cpanel-cron-setup.JPG

他のシステムのCronサービス

他のシステムでは、「Cron jobs」のようなボタンを探してください。そこでは、以下のUnixコマンドと同じようなコマンドを設定することができます。


あなたにサーバでwgetコマンドを実行するパーミッションがない場合、このphpコマンドを使用することができます:

/usr/local/bin/php -q /real/path/to/script/admin/cron.php

例えば:

/usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php

あなたのMoodleフォルダへの実パスが分からない場合、PHPの「realpath() 関数」を使用することができます。

もうひとつの方法、あなたにサーバでwgetコマンドを実行するパーミッションがない場合、curlコマンドを使用することができます。

Note:moodle 2.0以降、コマンドラインで実行するcron.phpのパスが変更されました。コマンドラインで実行する場合のパスは/admin/cli/cron.phpとなります。

例えば:

curl --silent --compressed http://mydomain.com/moodle/admin/cron.php

UnixのコマンドラインでCronを使用する

あなたがコマンドラインからページをコールするため、異なるコマンドラインプログラムがあります。サーバにより、実行できないプログラムもあります。

例えば、あなたは「wget」のようなUnixユーティリティを使用することができます:

wget -q -O /dev/null http://example.com/moodle/admin/cron.php

この例では、アウトプットは (/dev/null に) 破棄されます。

多くのMoodleユーザにより、「wget」が時々動作不良を起こすと報告されています。特にフォーラムから毎日メール要約がすべてのユーザに送信されない場合、代わりのコマンドで問題を解決することができます。

php http://example.com/moodle/admin/cron.php

同じくlynxを使用すると:

lynx -dump http://example.com/moodle/admin/cron.php > /dev/null

この例では、アウトプットは (/dev/null に) 破棄されます。

代わりにコマンドラインで実行するようコンパイルされた、スタンドアロンバージョンのPHPを使用することもできます。このPHPを使用するメリットは、あなたのウェブサーバのログがcron.phpの連続したリクエストで一杯にならないことです。このPHPを使用するデメリットは、コマンドラインバージョンのPHPにアクセスしなければならないことです。

/opt/bin/php /web/moodle/admin/cron.php

Unixのcrontabプログラムを使用する

Cpanelでは、crontabとして知れられているUnixユーティリティのウェブインターフェースを提供します。あなたがコマンドラインを使用できる場合、コマンドを使用して、自分でcrontabを設定することができます。

crontab -e

そして、前述「Cron Jobs -> Advanced (Unix style)」の内容を次のように追加します:

*/30 * * * * wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php

最初の5つのエントリは、それに続くコマンドを実行するための時間の値です。アスタリスク (*) は、常時を意味するワイルドカードです。上記例では、コマンド「wget -q -O /dev/null...」を30分毎 (*/30)、毎時 (*)、毎日 (*)、毎月 (*)、すべての曜日 (*) に実行します。

「-O」の「O」は、ゼロではなく、アウトプット先を示す大文字のO (オー) です。この例の場合、アウトプットを破棄するブラックホール「dev/null」をアウトプット先としています。あなたがcron.phpのアウトプットを表示したい場合、ブラウザにURIを直接入力してください。

あなたが「初心者」の場合、「EDITOR=nano crontab -e」コマンドにより、nanoエディタを使用して、crontabを編集することができます。Ubuntuでは、nanoエディタをデフォルトのエディタとしています。

通常、「crontab -e」コマンドでは、viエディタが起動されます。「i」キーを押すことで、挿入モードに入ります。前述のコマンドラインを入力して、ESCキーを押すことで、挿入モードから抜けます。「wq」とタイプすることで、あなたは内容を保存して、viエディタを終了させることができます。または、「q!」とタイプすることで、内容を保存せずに、viエディタを終了させることができます。viエディタに関するイントロダクション (英語) は、こちらをご覧ください

関連情報

Using Moodleフォーラムディスカッション (英語):