通過命令行管理Moodle

出自MoodleDocs
前往:導覽、​搜尋

如若有Web服務器的Shell腳本權限,在管理Moodle期間可能會找到各種不同的、有用的CLI(命令行界面)。核心管理CLI工具放在文件夾admin/cli/*下。而插件的CLI功能則通過插件本身的CLI文件夾內的腳本提供。例如,enrol_db sync腳本放在文件夾enrol/db/cli/下。

為避免出現權限控制的問題,執行命令時需要以Web服務器進程所有者的身份來進行。CLI的安裝與升級尤為重要,因為在安裝與升級時都會在數據目錄 創建新文件,同時Web服務器必須對其有可寫權限。Linux版本裡,用戶所用的Web服務器用戶通常為apache或wwrun或http或其他類似的 用戶。作為root用戶,可能需要執行如下CLI腳本:
 $ cd /path/to/your/moodle/dir
 $ sudo -u apache /usr/bin/php admin/cli/somescript.php --params
大多數腳本接受常規的「--help(或-h)」參數,這樣就可以顯示全部的有用信息,如:
 $ sudo -u apache /usr/bin/php admin/cli/install.php --help

通過命令行升級

Moodle可以通過命令行來升級。和安裝腳本一樣,升級過程也有互動模式與非互動模式之分。腳本本身不會將站點設置為維護模式,必須手動將其設為維護模式。同樣,腳本也不會為你備份任何數據(如若已閱讀到這篇文章了,應該有一些自己的腳本以備份數據及數據庫,是嗎?)。
 $ sudo -u apache /usr/bin/php admin/cli/upgrade.php
如若通過命令行使用Git檢出Moodle源碼(參見管理員使用Git)的方法升級Moodle,這將會是一個非常方便的方法。下面的過程解釋了如何在數秒之內把站點升級到最新版本,同時保留跟蹤Git庫的最終本地自定義版本。
 $ cd /var/www/sites/moodle/htdocs/
$ sudo -u apache /usr/bin/php admin/cli/maintenance.php --enable
$ git pull
$ sudo -u apache /usr/bin/php admin/cli/upgrade.php
$ sudo -u apache /usr/bin/php admin/cli/maintenance.php --disable

通過命令行安裝

從Moodle2.0開始,可以通過命令行來安裝Moodle。有兩種安裝模式:一種是交互模式,通過此模式安裝時,安裝腳本會向你詢問設置新站點 的數據;另一種是非交互模式,通過此模式安裝時,必須提供所有腳本參數的數據,然後新站點會默默地開始安裝。參數同樣可以在交互模式下傳遞。交互模式所提 供的參數值將會被用作交互會話下的默認值。
 $ sudo -u apache /usr/bin/php admin/cli/install.php --lang=cs

維護模式

通過CLI將站點設為維護模式,可使用如下命令:
 $ sudo -u apache /usr/bin/php admin/cli/maintenance.php --enable
關閉維護模式,只需將參數「--enable」變為「--disable」,然後執行即可。

離線模式

在一些情況下,可能需要將網站設為離線模式,這樣其他用戶將不能通過網絡訪問站點,但這並意味着Web服務器已經被完全停止了(通常是因為服務器上還運行着其他Web頁面及應用程序)。如果名為climaintenance.html的文件放在moodledata的根目錄下,Moodle將會自動顯示此文件的內容:
 $ cd /var/www/sites/moodle/moodledata/
 $ echo '<h1>Sorry, maintenance in progress</h1>' > climaintenance.html
當然也可以準備一個漂亮的格式化HTML頁面用來通知用戶服務器已關閉,同時在moodledata目錄下保留一個名為climaintenance.off的文件,如若有必要可以將其重命名為climaintenance.html。

自定義站點默認值

在使用CLI進行安裝及升級時,Moodle會將管理所用變量設為默認值。當然也可以使用不同的默認值,參見[https://tracker.moodle.org/browse/MDL-17850 MDL-17850]獲取細節。簡而言之,只需將名為local/defaults.php的文件放到Moodle安裝程序里即可。文件格式類似如下:
<span style="font-weight: bold"><?php</span>
<span style="color: #000088">$defaults</span><span style="color: #009900">[</span><span style="color: #0000ff">'pluginname'</span><span style="color: #009900">]</span><span style="color: #009900">[</span><span style="color: #0000ff">'settingname'</span><span style="color: #009900">]</span> <span style="color: #339933">=</span> <span style="color: #0000ff">'settingvalue'</span><span style="color: #339933">;</span> <span style="color: #666666; font-style: italic">// for plugins</span>
<span style="color: #000088">$defaults</span><span style="color: #009900">[</span><span style="color: #0000ff">'moodle'</span><span style="color: #009900">]</span><span style="color: #009900">[</span><span style="color: #0000ff">'settingname'</span><span style="color: #009900">]</span> <span style="color: #339933">=</span> <span style="color: #0000ff">'settingvalue'</span><span style="color: #339933">;</span> <span style="color: #666666; font-style: italic">// for core settings</span>
這些默認值可用於安裝、升級並可顯示在站點管理頁面。

重置用戶密碼

如若忘了管理員密碼(或者想給任何其他用戶設置新密碼),可以通過rest_password.php腳本文件進行設置。這個腳本文件為用戶設置了正確的Salt密碼算法。
 $ sudo -u apache /usr/bin/php admin/cli/reset_password.php

轉換MySQL存儲引擎

如若使用MySQL作為站點後台的數據庫且使用MyISAM作為數據庫表的默認引擎,可能會需要將其轉換為更為可靠的引擎如InnoDB(實際上,你還可能會想把數據庫都換為PostgreSQLhttp://nise.org.cn/drupal/sites/all/libraries/ckeditor/plugins/smiley/images/regular_smile.gif隨你了):
 $ sudo -u apache /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB

通過命令行執行Cron腳本

Moodle1.x等版本,想要執行Cron只能通過admin/cron.php,而不能通過命令行或Web。從2.0開始,只有admin/cli/cron.php腳本可以用於執行命令行。

計劃任務

從Moodle 2.7開始,計劃任務可以由上面的Cron腳本自動執行,但是運行了每個迭代Cron腳本的特定任務則由計劃任務的配置來決定是否執行。使用 admin/tool/task/cli/scheduled_task.php腳本有可能會覆蓋掉計劃任務的配置並立即執行一個獨立的計劃任務。

這個腳本接受如下參數:
--list —— 列出所有已知的计划任务。任务由用于执行任务的类名排列。类名用来作为下一选项的参数,使其可以即刻执行特殊任务。
--execute=& lt;任務名>(<task>)——立即執行一個計劃任務——而不管其計劃設置。這個參數甚至可以執行被禁用的任務。任務仍然會使用鎖 以防止同一任務被同時執行——集群也這樣。<任務名>參數的格式必須與上述參數「--list」列出的一模一樣。

數據庫轉移

數據庫轉移的命令行腳本可能在admin/tool/dbtransfer/cli/migrate.php找到。

通過命令行更新用戶圖片

[http://moodle.org/pluginfile.php/143/mod_forum/attachment/926929/updatepics.php http://moodle.org/pluginfile.php/143/mod_forum/attachment/926929/updatepics.php] 
為2.3.1以上版本進行測試

把文件放在/admin/cli/updatepics.php。

如何使用:執行命令時帶上選項「dir」以指定哪個目錄含有該文件。
 .../admin/cli/updatepics.php --dir=PATH_TO_DIR
  • 文件名必須與用戶名相一致。

通過命令行管理模塊,版塊

這裡有兩個幫助管理插件的腳本。
[http://tracker.moodle.org/browse/MDL-35736 http://tracker.moodle.org/browse/MDL-35736]
如何使用「manage_blocks.php」:位置在/admin/cli。

隱藏: ../admin/cli/manage_blocks.php --name=tag_youtube --hide

顯示: ../admin/cli/manage_blocks.php --name=tag_youtube --show

刪除: ../admin/cli/manage_blocks.php --name=tag_youtube --delete

保護: ../admin/cli/manage_blocks.php --name=tag_youtube --protect

取消保護: ../admin/cli/manage_blocks.php --name=tag_youtube --unprotect

(很顯然——用需要移除的版塊替換掉「tag_youtube」 )

如何使用「"manage_mods.php」:

隱藏: ../admin/cli/manage_blocks.php --name=game --hide

顯示: ../admin/cli/manage_blocks.php --name=game --show

刪除: ../admin/cli/manage_blocks.php --name=game --delete

  • 重要!

這些腳本並不刪除/moodle/mod或/moodle/blocks相應的文件夾,必須手動刪除它們。

通過CLI更新語言包

[http://tracker.moodle.org/browse/MDL-35735 http://tracker.moodle.org/browse/MDL-35735]
把附加文件放在/admin/cli,然後執行腳本,無需任何命令行參數。

通過CLI對課程列表重新排序

[http://tracker.moodle.org/browse/MDL-36237 http://tracker.moodle.org/browse/MDL-36237]
把附加文件放在/admin/cli,然後執行腳本,無需任何命令行參數。

每天晚上從外部系統導入課程後,執行此腳本。

通過CLI清除緩存

可以使用如下腳本清除緩存:

php admin/cli/purge_caches.php