通过命令行管理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