Help us understand the problem. What is going on with this article?

Moodle 3.8 - コマンドライン経由での管理

原文

コマンドライン経由での管理

内容

1 CLI スクリプトを実行する
2 アップグレード
3 インストール
4 メンテナンスモード
5 オフラインモード
6 カスタムサイトのデフォルト
7 ユーザパスワードをリセットする
8 MySQL ストレージのエンジンの変換
9 InnoDB テーブルを Barracuda に変換する
9.1 テーブルを変換するツール
10 あたらしい文字列セットへの変換と照合
11 コマンドライン経由で cron を実行する
12 スケジュールしたタスク
13 データベースの移設
14 キャッシュを一掃する
15 すべてのセッションを kill する
16 コース / モジュールのシーケンスを修正する
17 親がいない質問カテゴリを修正する
18 テキストの検索と置換
19 CSS キャッシュのテーマをビルドする
20 関連項目

1 CLI スクリプトを実行する

あなたの web サーバに shell アクセスができるのなら、Moodle インストールの過程で、様々な役に立つ CLI(コマンドラインインターフェース)スクリプトがあることに気づくでしょう。管理者用のコアな CLI ツールは、以下のフォルダに存在しています。

admin/cli/*

その他のプラグインは彼らの CLI の機能を、彼ら自身の cli フォルダの中のスクリプト経由で提供しています。倒えば、enrol_db sync スクリプトは、以下にあります。

enrol/db/cli/

アクセスコントロールにおける問題を避けるためには、それらを web サーバプロセスの所有者で実行すべきです。これは CLI インストール環境では特に重要であり、アップグレードの際に moodledata ディレクトリに新しいファイルを作成し、web サーバはそれらに書き込み権限を持っていなければいけません。Linux ディストリビューションにおいては、web サーバを実行しているユーザは通常は apache 、wwrun または httpd あるいはその他似たようなユーザです。root ユーザで、あなたはおそらく以下のような Moodle 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

注:これらのスクリプトは、web サーバユーザの管理下において実行されることを前提としています。このページの例は、インストールのために、apache ユーザを使用しています。特定の値は、あなたの OS ディストリビューションおよびローカルセットアップによります。典型的な値は apache、www-data あるいは httpd でしょう。

2 アップグレード

Moodle は、コマンドラインからアップレードできます。インストールスクリプトにより、アップグレードはインタラクティブあるいはそうでないモードがあります。スクリプトそれ自体は、サイトをメンテナンスモードにしないため、自分自身でしなければいけません。さらに、スクリプトはどんなデータもバックアップしません(このページを読むのなら、あなたの moodledata と database をバックアップするために自分自身のスクリプトを作らなければいけませんよね?)。

$ sudo -u apache /usr/bin/php admin/cli/upgrade.php

あなたが、Moodle ソースコードの Git チェックアウト(Git ガイドを参照してください。)を使っているのなら、コマンドラインを経由してアップグレードすることは、とてもやりやすいでしょう。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

3 インストール

コマンドラインから、Moodle をインストールすることは、2 つのモードがあります。インタラクティブモードでは、インストールスクリプトが あたらしい Moodle サイトをセットアップするために必要なすべてのデータについて尋ねます。ノン・インタラクティブモードでは、スクリプトのパラメータにすべての必要なデータとして与えることにより、あたらしいサイトは静かにインストールされます。パラメータはインタラクティブモードでも渡せます。与えられた値は、そして、インタラクティブセッションの最中にデフォルト値として使用されます。

$ sudo -u apache /usr/bin/php admin/cli/install.php --lang=cs

もし必要であるなら、データベースインストールは、config.php にこのように渡すことによりスキップできます。

$ sudo -u apache /usr/bin/php admin/cli/install.php --skip-database

4 メンテナンスモード

サイトを CLI を経由してメンテナンスモードにするには、以下を使えます。

$ sudo -u apache /usr/bin/php admin/cli/maintenance.php --enable

メンテナンスモードをオフにするには、同じスクリプトを --disable パラメータで実行します。

$ sudo -u apache /usr/bin/php admin/cli/maintenance.php --disable

メンテナンスモードに有効するのに、即座に移行するのではなく、あなたのユーザのためにカウントダウンしたい場合には、同じスクリプトに、--enablelater に分の数を与えれば、カウントダウンが実行されます。

$ sudo -u apache /usr/bin/php admin/cli/maintenance.php --enablelater=10

このスクリプトは、"offline" モードのために、climaintenance.html を作成し、削除します。

5 オフラインモード

ある環境では、あなたの Moodle サイトをオフラインモードにして、web からアクセスできないようにしたいと思うかもしれませんが、web サーバを完全に止めることはできません(通常、その他の web ページやアプリケーションがそこで実行中であるためです)。もし、climaintenance.html というファイルが moodledata ディレクトリの root フォルダに存在しているのなら、Moodle はその他のページの代わりに、自動的にそのファイルの内容を表示します。

$ cd /var/www/sites/moodle/moodledata/
$ echo '<h1>Sorry, maintenance in progress</h1>' > climaintenance.html

サーバが停止する予定であることをお知らせするために、あなたのユーザに素敵にフォーマットされた HTML ページを準備し、moodledata ディレクトリに必要であれば以下の名前で保存できます。

climaintenance.off

そして、以下にリネームできます。

climaintenance.html

6 カスタムサイトのデフォルト

インストールとアップグレードの最中に、Moodle は管理者用の変数をデフォルトの値にセットします。あなたは異なるデフォルトの値を使用できます。詳細は、MDL-17850 を見てください。端的に言うと、あなたの Moodle のインストール環境に、local/defaults.php というファイルを追加するだけです。
ファイルのフォーマットは、以下のようです。

<?php
$defaults['pluginname']['settingname'] = 'settingvalue'; // for plugins
$defaults['moodle']['settingname'] = 'settingvalue';     // for core settings

これらのデフォルトは、インストールやアップグレードの最中に使われるとともに、Site administration のページにデフォルトとしても表示されます。

7 ユーザパスワードをリセットする

あなたの admin パスワードを忘れてしまったら(サイトのその他のユーザのためにパスワードを設定したいのなら)、reset_password.php スクリプトを使用できます。スクリプトは、与えられたユーザのために正しく salt されたパスワードに設定します。

$ sudo -u apache /usr/bin/php admin/cli/reset_password.php

8 MySQL ストレージのエンジンの変換

あなたの Moodle サイトを MySQL データベース バックエンドで実行しており、あなたのテーブルの storage エンジンに デフォルトの MyISAM を使用しているのなら、InnoDB のようなもっと信頼性のあるエンジン(実際は、PostgreSQL に変えるべきですが( ˆoˆ )/)に返還したいと考えるかもしれません。

$ sudo -u apache /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB

9 InnoDB テーブルを Barracuda に変換する

MySQL データベースのテーブルに ファイルフォーマットとして Antelope を使っているサイトは、Baracuda ファイルフォーマットのテーブルに変換することを勧めます。

これは、ファイルフォーマットとしてAntelope を使っているテーブルは、10より多いテキストカラムを扱えないためです。このファイルフォーマットは、ぎっしり詰まって重複した (compact and redundant) 行フォーマットのみを後方互換性のためのみサポートしています。大きなサイトでは、コースを保存する時に問題が発生し、その時は、以下のエラーが表示されるでしょう。

Row size too large (>8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help.

Barracuda は、最新の innoDB ファイルフォーマットです。ぎっしり詰まって重複した (compact and redundant) 行フォーマットをサポートするのみならず、Barracuda は、compressed and dynamic な行フォーマットもサポートします。

しかしながら、Barracuda テーブルへの変換は、すべての MySQL ユーザが影響を受けるわけではないため、推奨されるだけであり、必須ではありません(より大きなサイトのみの問題でしょう。)。

9.1 テーブルを変換するツール

Moodle には、テーブルを Barracuda に変換するコマンドラインツールが含まれています。

変換を必要とするテーブルを確認するには、--list オプションを使ってください。

$ php admin/cli/mysql_compressed_rows.php --list

以下は、出力の一例です。

mdl_data                            Compact     (needs fixing) 
mdl_data_fields                     Compact     (needs fixing)
mdl_enrol_paypal                    Compact     (needs fixing)

変換を進めるには、fix オプションによりコマンドを実行してください。

$ php admin/cli/mysql_compressed_rows.php --fix

テーブルの返還に成功すると、以下の一例のように報告が出力されます。

mdl_data                   ... Compressed
mdl_data_fields            ... Compressed
mdl_enrol_paypal           ... Compressed

コマンドは、あなたの moodle ディレクトリ上で実行されるべきであることに注意してください。テーブルが修正されると、注意メッセージはもう表示されません。

InnoDB フォーマットのさらなる情報については、MySQL InnoDB glossary の Antelope と、MySQL InnoDB glossary - Barracuda を確認してください。

これらのコマンドを実行するのに不十分な権限しかないためにエラーが発生する(その可能性が高いと思いますが)のなら、もっとも簡単な解決方法は、必要とされる SQL コマンドを、以下を使って生成させることです。

$ php admin/cli/mysql_compressed_rows.php --showsql

そして、生成された SQL を、あなたの mysql クライアントで、'root' ユーザになり実行してください。

10 あたらしい文字列セットへの変換と照合

$ php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci

11 コマンドライン経由で cron を実行する

バージョン 1.x では、admin/cron.php を、コマンドラインか web から実行できます。Moodle 2.0 からは、コマンドライン経由で、admin/cli/cron.php スクリプトのみから実行できます。

12 スケジュールしたタスク

スケジュールされたタスクは、自動的に cron スクリプトにより実行されますが、それぞれの cron イテレーション上で実行される特定のタスクはスケジュールされたタスクの設定により決定されます。スケジュールされたタスクを上書きすることは可能であり、admin/tool/task/cli/schedule_task.php により、単独のスケジュールされたタスクとしてすぐさま実行することは可能です。

このスクリプトは、以下の引数を受けつけます。

--list - すべての知られているスケジュールされたタスクをリストアップする。タスクは、使用されているタスクを実行するクラス名としてリストされる。このクラス名は、次のオプションへの引数として、特定のタスクをすぐさま実行するために、必要とされます。

--execute=<task> - 単独のスケジュールされたタスクをすぐさま実行する - スケジュールされた設定にかかわらず。 これは、無効にされているタスクでも実行します。Tasks will still use locking to prevent concurrent execution of the same task - even on clusters. The format of the <task> argument must be the same as returned by the --list option above.
--showsql - 実行される前に、sql クエリを表示する。
--showdebugging - 開発者用デバッグ情報を表示する。

注:--execute コマンドを使用するときは、"\" を、さらなる "\" でエスケープしなければいけません。以下の一例のように。

php schedule_task.php --list

は、以下のような結果を得るでしょう。

== List of scheduled tasks (http://yourserver.com/moodle) ==
\enrol_imsenterprise\task\cron_task                10 * * * * *      ASAP
\logstore_legacy\task\cleanup_task                 * 5 * * * *       ASAP
\logstore_standard\task\cleanup_task               * 4 * * * *       Wednesday, November 12, 2014, 4:35 AM
\mod_forum\task\cron_task                          * * * * * *       ASAP
\core\task\automated_backup_task                   50 * * * * *      ASAP

...

リストの最初のタスクを実行するには、以下のように実行してください。

php schedule_task.php --execute='\enrol_imsenterprise\task\cron_task'

シングルクオートに注意してください。それなしでは、シェルによってエスケープされることを避けるために、ダブルバックスラッシュを使うべきでしょう。

13 データベースの移設

Database transfer のためのコマンドラインスクリプトは、admin/tool/dbtransfer/cli/migrate.php にあります。

14 キャッシュを一掃する

このスクリプトを使うことにより、キャッシュを一掃できます。

php admin/cli/purge_caches.php

15 すべてのセッションを kill する

管理者的な理由により必要であるならば、全てのユーザセッションを、このスクリプトを使って、kill できます。

php admin/cli/kill_all_sessions.php

その結果、すべてのユーザは、Moodle からログアウトされるでしょう。

16 コース / モジュールのシーケンスを修正する

まれなケースでは(とても古いバージョンの Moodle からアップグレードした後のような)、コース / セクション / モジュールのシーケンスデータが、同期から外れる可能瀬があります。これは、関連するコースにおいて、セクションが表示されない、バックアップが失敗する、ページが表示されない、その他の様々な問題を引き起こします。これは、エラーをこの問題により引き起こされるエラーをチェックすることの確認であり、もしそれらが見つかったのなら、データベースにおけるデータを修正することの確認となります。このスクリプトを実行するには、以下のコマンドを実行してください。

php admin/cli/fix_course_sequence.php -c=* --fix

これは、Moodle におけるすべてのコースをチェックし、どのコースにエラーがあり、それが修正されたかについて報告します。

17 親がいない質問カテゴリを修正する

クイズが作成された時、クイズのための新しいカテゴリが自動的に作成されます。Moodle の 2.9.1 以前のバージョンにおいては、もしクイズが削除されたなら、質問のカテゴリと、そのカテゴリ内のどんな質問もデータベース中に残ります。これらの親がいないカテゴリは、admin/cli/fix_orphaned_question_categories.php に、--fix オプションを追加してスクリプトを実行することにより修正できます。

18 テキストの検索と置換

このスクリプトは、データベース全体をとおして検索し置換することに使えます。最初にバックアップを取り、注意深く使用してください。さらなる情報は、Search and replace tool を参照してください。

 php admin/tool/replace/cli/replace.php --search=//oldsitehost --replace=//newsitehost

19 CSS キャッシュのテーマをビルドする

もし Moodle がデザイナモードのテーマで実行されていないならば、ローカルディスクにコンパイルした CSS のコピーを保存して、Moodle がページを要求した時にそのコピーをブラウザに提供します。ローカルディスクにコピーが存在しないならば、Moodle の内部のページが要求された最初の回に、コピーがビルドされます。

このスクリプトにより、ユーザが最初のページリクエストの最中にテーマがコンパイルされるのを待つのを避けるために、Moodle の内部のテーマのためにキャッシュされた CSS ファイルをあらかじめコンパイルできます。

php admin/cli/build_theme_css.php --themes=boost

20 関連項目

MDL-35736 - Manage plugins via command line
MDL-36237 - Resort course list via CLI
MOOSH - MOOdle SHell. It is a commandline tool that will allow you to perform most common Moodle tasks.

カテゴリ:インストール
メインページ

intrajp
私は、AWS 上で教育用コンテンツ管理システムである "Moodle" というオープンソースのシステムを構築・運用・管理・保守・サポートする Moodle の公式パートナーの会社に勤務しています。このブログは私的な活動であり、会社の仕事とは無関係です。私は、公式の Moodle Developer です。https://moodle.org/dev/
https://github.com/intrajp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした