■ 江西 黎忠東
編者按: 筆者從事Moodle平臺課程工作,有時會出現Cron計劃任務不正常,導致Moodle課程也無法正常運行,本文就將詳細講解該故障情況。
Moodle中的Cron主要是定時執行自動備份課程、收發郵件等工作,Cron計劃任務不正常會對Moodle課程造成緩慢、不穩定等影響,甚至讓課程的某些功能出現問題。筆者通過Moodle在Unix和Linux中Cron的運行機制來闡述Moodle系統中的計劃任務不正常運行的原因。
Cron程序是基于Unix(包 括 Linux和 OSX)的 核心部分,用于運行各種與時間相關的服務。Moodle中的Cron主要是定時執行Moodle課程中的相關計劃與任務,比如準備要批注的作業、刪除臨時文件、自動備份課程、收發郵件、清理課程、刪除不必要的監看事件及其他相關維護工作。如果Cron腳本長期不運行,會對Moodle課程造成緩慢、不穩定等影響,甚至會讓課程的某些功能出現問題。
一般Moodle課程中的Cron計劃任務每1分鐘或每5分鐘或每15分鐘運行一次,一般推薦每1分鐘或每5分鐘運行一次。可以在“首頁-網站管理-通告”中查看Cron計劃任務是否正常運行,如出現“已經至少24小時沒有運行cron.php維護腳本了”的提示,則說明Cron計劃任務運行不正常,應該找到原因,讓其定期執行。
計劃任務在不同環境中,運行機制不同,在Windows上最簡單的方法是在計劃任務程序中創建一個任務,并將其設定為定期運行。
本質上,Cron任務涉及將單個命令添加到系統上的Cron活動列表中,在基于Unix系統上,此列表是一個名為“crontab”的文件,所有用戶擁有該文件。由于Moodle課程大部分運行在Linux系統和Unix系統上,所以本文主要分析Cron在Linux和Unix系統上不正常運行的原因。
Moodle課程中涉及Cron計劃任務的相關命令,已經編制成一個名為cron.php的文件,只要正確的將執行cron.php計劃任務的命令寫到crontab,系統就能定時地運行這些計劃任務。Moodle課程中Cron計劃任務不正常運行的原因,就應該從以下四個方面進行查找分析:
1.檢查確定要運行的計劃任務命令在系統中能否正常運行并通過。
Moodle中要運行的計劃任務命令已經編寫成一個名為cron.php文件,應該要手工執行cron.php中計劃任務,看能否正常運行,有無錯誤提示。

圖1 檢查crontab中Cron計劃任務及其執行權限
如果是在Linux中可輸入:
# sudo /usr/bin/php /path/to/moodle/admin/cli/cron.php
如果是在FreeBSD中可輸入:
% sudo /usr/local/bin/php /path/to/moodle/admin/cli/cron.php
注意php及cron.php都應該引用全局地址,如果不知道php及cron.php的絕對地址,可以用which或whereis兩個命令查找其地址。
輸入以上命令時,注意查看命令能否正常運行,有無錯誤提示,如不能正常運行或有錯誤提示,則應根據提示具體分析,系統自帶的cron.php計劃任務應沒有問題,如果是修改了就要用編輯軟件打開cron.php文檔查看源代碼是否有問題。
2.檢查執行計劃任務命令代碼是否保存在正確位置。
執行計劃任務命令代碼保存在正確的位置包括兩個方面:一是檢查是否存放在crontab中,二是檢查crontab執行權限是否正確。
如果是安裝時配置Cron,則要創建一個crontab文件,執行權限交由Web訪問用戶(本示例中Web訪問用戶為 www): “crontab -u www -e”。如果不知道自己系統的Web訪問用戶名稱,可以輸入如下命令查找:“pw user show -a”。
如果是已經配置了Cron且已經在使用的Moodle平臺,則要用如圖1所示命令檢查crontab中有沒有Cron計劃任務及crontab的執行權限是否正確。
3.檢查crontab的命令代碼有沒有諸如運行時間及語法等方面的問題。
仔細核對crontab中的代碼,比如筆者FreeBSD中的crontab代碼如下:
*/5 * * * * /usr/local/bin/php /usr/local/www/moodle/admin/cli/cron.php
注意代碼中的php及cron.php要用絕對地址,新建或修改后會出現如下提示:“crontab: installing new crontab”。
crontab中前5個字段分別表示分鐘、小時、日期、月份、星期,還可以用一些特殊符號:例如“*”表示任何時刻;“,”表示分割;“-”表示一個段,如在第二段里,“1-5”就表示1到5點;“/n”表示每個n的單位執行一次,如第一段里,“*/5”就表示每隔5分鐘執行一次命令。
4.檢查系統中的cron計劃任務本身是否正常。
為了防止系統Cron本身問題造成Moodle課堂的計劃任務執行不正常,可以用以下命令進行調試:
crontab /etc/rc.d/cron status
crontab /etc/rc.d/cron start
crontab /etc/rc.d/cron stop
crontab /etc/rc.d/cron restart
tail -f /var/log/cron
經過以上檢查,基本上的Cron都能正常執行了。24小時后,Moodle網絡中“網站管理-通告”沒有以上出現的提示,則說明Moodle課堂Cron計劃任務正常運行。