プライム・ストラテジー「KUSANAGI」開発チームの石川です。
KUSANAGIコマンドは、sshでログインしてコマンドラインで実行するだけでなく、シェルスクリプトから実行することもできます。
しかし、KUSANAGIコマンドの出力はコマンドラインで人が見ることを前提としているため、そのまま利用することが難しい場合があります。
今回はシェルスクリプトから実行KUSANAGIコマンドを実行して、その出力を組み合わせて運用する実例を紹介したいと思います。
KUSANAGIのプロファイル名の一覧を取得する
KUSANAGIの運用で一番最初に思い付くのはKUSANAGIのプロファイルに対しと処理を行うことです。
その際にまず必要なことは、プロファイル名の一覧を得ることです。
ここでは kusanagi_html
と kusanagi_test
の2つのプロファイルがある環境を例にします。
KUSANAGIのプロファイルは /home/kusanagi/PROFILE
のように、 /home/kusanagi
配下に作成されるため、シェルスクリプトで一覧にする際は様々なやり方があるように思えます。
この目的のために kusanagi list コマンドが用意されています。
# kusanagi list
kusanagi_html
kusanagi_test
list completed.
このままでは2つ問題があります。
- コマンドが正常に終了したかどうかが判断できない。
- 最後に
list completed.
のように、プロファイル以外の出力がある。
コマンドの正常終了を確認する
KUSANAGIコマンドの実行結果を確認する 方法は、過去に本コラムにて紹介していますので、詳細はそちらを参照してください。
ポイントは以下です。
- 正常終了時は
コマンド名 completed.
と緑文字で表示される。 - ステータスコード 0 が返る。
実際にプロファイルの一覧を取得する
この点に注意して、上記のコマンドをフィルタリングする処理をシェルスクリプトで実行します。
#!/bin/bash
/opt/kusanagi/bin/kusanagi list | while read profile; do
# プロファイル名が各行に出力されて ${profile} に格納されます
# ただし、完了のメッセージ 'list completed.' は除きます
if [[ "${profile}" == 'list completed.' ]]; then
break
fi
# プロファイル名を処理します。
# ここでは例として画面に出力してみます
echo "プロファイル名は ${profile} です。"
done
# bash test.sh
プロファイル名は kusanagi_html です。
プロファイル名は kusanagi_test です。
無事にプロファイル名だけが抜き出せました。
KUSANAGIのプロファイルの詳細を得る
次に、このプロファイルの DocumentRoot
の場所を特定してみましょう。
kusanagi show コマンドで、各プロファイルの詳細を得ることができます。
# kusanagi show kusanagi_html
type = wp
fqdn = host.example.com
dir = /home/kusanagi/kusanagi_html
dbname = kusanagi_html
dbuser = kusanagi_html
dbpass = ********
wplang = ja
mariadb = yes
psql = no
bcache = off
fcache = off
ratelimit = on
show completed.
実際にプロファイルの DocumentRoot を取得する
プロファイル名を取得したシェルスクリプトに DocumentRoot
を取得する処理を加えます。DocumentRoot
は dir
で示されたパスに /DocumentRoot
を付加したものとなります。
#!/bin/bash
/opt/kusanagi/bin/kusanagi list | while read profile; do
# プロファイル名が各行に出力されて ${profile} に格納されます
# ただし、完了のメッセージ 'list completed.' は除きます
if [[ "${profile}" == 'list completed.' ]]; then
break
fi
# プロファイル名を処理します。
/opt/kusanagi/bin/kusanagi show "${profile}" | while read detail; do
# プロファイルの詳細が各行に出力されて ${detail} に格納されます
# ただし、完了のメッセージ 'show completed.' は除きます
if [[ "${detail}" == 'show completed.' ]]; then
break
fi
# プロファイルのディレクトリは 'dir = ' で表示されます
if [[ "${detail}" =~ ^dir[[:blank:]]=[[:blank:]](.+)$ ]]; then
dir="${BASH_REMATCH[1]}"
# ここでは例として画面に出力してみます
echo "${profile} のDocumentRootは ${dir}/DocumentRoot です。"
fi
done
done
# bash test.sh
kusanagi_html のDocumentRootは /home/kusanagi/kusanagi_html/DocumentRoot です。
kusanagi_test のDocumentRootは /home/kusanagi/kusanagi_test/DocumentRoot です。
プロファイルごとにDocumentRootを取得することができました。
KUSANAGIのプロファイルのWordPressのバージョンを得る
次に応用編です。
プロファイルごとにWordPressのバージョンを取得してみましょう。
WordPressの情報を取得するには wp
コマンドを使用します。
ここでは wp core version を使います。
また、プロファイルにはWordPress以外の場合があります。
そこで type
が wp
以外の場合はスキップするようにします。
#!/bin/bash
/opt/kusanagi/bin/kusanagi list | while read profile; do
# プロファイル名が各行に出力されて ${profile} に格納されます
# ただし、完了のメッセージ 'list completed.' は除きます
if [[ "${profile}" == 'list completed.' ]]; then
break
fi
# プロファイル名を処理します。
/opt/kusanagi/bin/kusanagi show "${profile}" | while read detail; do
# プロファイルの詳細が各行に出力されて ${detail} に格納されます
# ただし、完了のメッセージ 'show completed.' は除きます
if [[ "${detail}" == 'show completed.' ]]; then
break
fi
# WordPressのプロファイルは 'type = wp' で表示されます
if [[ "${detail}" != 'type = wp' ]]; then
# WordPress以外の場合は処理をスキップします
echo "${profile} は WordPress ではありません。"
break
fi
# プロファイルのディレクトリは 'dir = ' で表示されます
if [[ "${detail}" =~ ^dir[[:blank:]]=[[:blank:]](.+)$ ]]; then
dir="${BASH_REMATCH[1]}"
# wp core version でバージョンを出力させます。
echo "${profile} の WordPress のバージョンは以下です。 "
wp core version --path="${dir}/DocumentRoot"
fi
done
done
# bash test.sh
kusanagi_html の WordPress のバージョンは以下です。
6.5.2
kusanagi_test は WordPress ではありません。
更なる活用
kusanagi
コマンド と wp
コマンド を組み合わせた例をここまで紹介しました。
wp
コマンドでは、アップデートはもちろんのこと、テーマやプラグインの情報を取得することもできます。
これらを組み合わせることで、例えば使用しているテーマを一覧にしたり、プラグインをアップデートしたりすることもできます。
また、シェルスクリクトからkusanagi
コマンドを実行することで、 cron
などで自動化することもできます。
kusanagi
コマンドをシェルスクリプトで活用して、KUSANAGIの運用に役立ててみてください。