概要
Moodle 2.7にForumNGをインストール→動作しない→アンインストール→cron.phpが完了しない→lockファイル手動消去→回復
前提
Moodleはオープンソースのコース管理システム(LMS). ForumNGはOpen University in UKによって開発された, 標準モジュールのForumよりも高機能な活動を提供するプラグイン.
時系列で
ForumNGのインストール
Moodle 2.7 に ForumNG をインストールしたが, 正常に機能しない(ウィークリーフォーマットの設置したブロック内にエラー表示が出る)のでアンインストールした.
不具合
その後, フォーラムの通知メールが(30分後に)送られてこないことに気づく. コース管理>サーバ>スケジュールをチェックすると, フォーラム通知がオフになっている. ForumNGのインストール/アンインストール過程によるものか? オンにする. それでも通知メールは送られてこない.
そこで, cron.php が機能していないという仮説で,
curl https://moodle.example.jp/Moodleインストールディレクトリ/admin/cron.php
してみると,
Server Time: 時刻
!!! ロック待ち時の操作タイムアウトです。 !!!
と表示される. Webの情報によれば, cron.php が正常に動作していてもこのメッセージが表示される頻度は低くない, とのこと. しかし, 今回は, cron.php が動作していない(例えばフォーラムの通知が送られない)のでさらに調査. Debug mode をTrueにしてみると,
Server Time: 時刻
Warning: open(/Moodleデータディレクトリ/lock/8b/8b以下一意文字列): failed to open stream: Permission denied in /Moodleインストールディレクトリ/lib/classes/lock/file_lock_factory.php on line 144
!!! ロック待ち時の操作タイムアウトです。 !!!
ロックファイルを消去
だいぶ危ない話だが, バックアップを取った後で, このロックファイルを消去してみた. すると, 他の多くのロックファイルについても, エラーが報告される. さらに危ない話だが, バックアップを取った後で, それらすべてのロックファイルを消去してみた.
結果
すると, cron.php は最後まで実行されるようになり, フォーラムのメール通知も定期的に行われるようになった. 今のところ, 観察可能な不具合は起きていない.
だいぶ間隔の空いた cron.php の(最後までの)実行において, 最近のフォーラム通知メールは遡って送られたが, 一定の時間が経った投稿については無視されたようだ.