- バックアップ > プラグイン更新 > WordPress 本体更新 > プラグイン更新
をWP-CLI(コマンドラインツール)を使って、Linux cronに組み込んで WordPressのメンテナンスを自動化しようっていうのを紹介してみます。本体更新の後に再度プラグイン更新をしているのは、WordPressの新しいバージョンのみ対応のプラグインの場合、本体更新後しかアップデートが出てこないため、念押しでやっています。
この方法を使うためには
- サーバーにログインできること
- WP-CLIがインストールでき、動作すること
- サーバーで cronが利用できること
が必要です。
関連情報
- 【備忘録】複数サイトのプラグインバージョン調べ - WP-CLI編 -
- WP CLI 本体を自動アップデートをする方法
- 第32回WordBench大阪に参加して〜WP-CLIの情報だよ〜
- コマンドラインツール「wp-cli」を利用したWordPressプラグインアップデートの自動化
個別説明
1. バックアップ
従って、まずは BackWPUPをインストールし、1つ以上のバックアップジョブを作成しておいて、WordPressから正しく動作することを確認しておいてください。
下図のように、Last Runのところに実施した日時が記録されており、LogをチェックしてエラーがなければOKです。
そしてジョブ編集画面のURLをみて、ジョブIDをメモります。
(/wp-admin/admin.php?page=backwpupeditjob&jobid=◯&.....)の◯部分の数字
(/wp-admin/admin.php?page=backwpupeditjob&jobid=◯&.....)の◯部分の数字
BackWPUPの特定ジョブをWP-CLIから実行するコマンドとしては
cd WordPressフォルダ
/usr/local/bin/wp backwpup start ◯の数字
です。
なお
cd WordPressフォルダ
/usr/local/bin/wp backwpup jobs
で登録しているジョブ一覧が出ます。
wpは WP-CLIのコマンドツールで、以後 /usr/local/bin にインストールしていると仮定します。
※ rootでコマンドを実施することは非推奨になっています。
もしやるなら、sudo -u ウェブサーバーの実行ユーザー -- wp ◯◯ のようにユーザーを限定してやってみてください。
※ rootでコマンドを実施することは非推奨になっています。
もしやるなら、sudo -u ウェブサーバーの実行ユーザー -- wp ◯◯ のようにユーザーを限定してやってみてください。
2. プラグイン更新
cd WordPressフォルダ
/usr/local/bin/wp plugin update --all
以下のように、アップデートが実施されます。
3. WordPress 本体更新
以下、メジャーバージョンアップを含む最新版へのアップグレードです。
cd WordPressフォルダ
/usr/local/bin/wp core update
/usr/local/bin/wp core update-db
ただし /usr/local/bin/wp core update で日本語版 WordPressへ更新されない場合には(up to dateになる)、
/usr/local/bin/wp core update --force --locale=ja
を試してみてください。
また WP-CLIによるBackWPUPを動作させるなら、BackWPUP側のバックアップスケジュールは「manually only」にしておくとよいです。
どうも WordPress cronでスケジュールすると、とても重くなるようです。
某サーバーでは /wp-cron.php が負荷が大きすぎるから制限したと通達を食らったことがありました。調べると、BackWPUPだったのですよね...
個別説明が出来た所で、これらのコマンドをログを取りながら実施するCSHスクリプトについて紹介します。サーバー環境によって適宜環境設定を変更してください。
CSHスクリプトの場合で ウェブサーバーのユーザー権限で実施すると仮定すると
cd WordPressフォルダ
/usr/local/bin/wp backwpup start ◯の数字
/usr/local/bin/wp plugin update --all
/usr/local/bin/wp core update --force --locale=ja && /usr/local/bin/wp core update-db
/usr/local/bin/wp plugin update --all
な感じになります。
これを CSHスクリプトにすると
- CSHスクリプト WordPressフォルダ BackWPUPのジョブID (言語 / 省略したら ja)
という感じで利用するとして、さらにどういう動作をしたのかログも取りたいと思いますので(ここでは、年月日.log に追記する形で保存)
簡易的なスクリプトにすると下記のような感じになるかなぁと思います。
WordPressのオーナーを apache(Apacheサーバーでありがち)にしてますが、そのあたりはサーバー管理者なら適宜修正できるでしょう。
なお下記のスクリプトは、このブログ用に作成しました。
実際に私が運用しているわけではありません。
拡張するなら、自動アップデート対象にしたくないプラグインを除外してアップデートできるとか、メールで実行完了通知を送るとか、別ファイルでアップデート対象を管理するなど、いろいろ考えられると思います。まぁ1つの参考にはなるかなと思います。
====== wp-auto-update.csh ======
#!/bin/csh -f
set LOG_DIR = "/◯◯/"
set LOG_FILE = "$LOG_DIR/`date +%Y%m%d`.log"
set WP_CLI = "/usr/local/bin/wp"
set WP_LANG = "ja"
if ("$1" == "" || "$2" == "") then
goto usage
endif
if ("$3" != "") then
set WP_LANG = "$3"
endif
set WP_DIR = "$1"
set JOBID = "$2"
if ( ! -d "$WP_DIR" || ! -f "${WP_DIR}/wp-config.php ) then
echo "Cannot find out $WP_DIR or Incorrect WordPress."
goto usage
endif
if ( ! -d "$LOG_DIR" ) then
mkdir $LOG_DIR
endif
cd $WP_DIR
echo "---" >> $LOG_FILE
echo "Start Log at `date +%Y%m%d.%H:%M:%S`" >> $LOG_FILE
echo "" >> $LOG_FILE
echo "### Backup WordPress files/folder and Database using BackWPUP Plugin ###" >> $LOG_FILE
echo "" >> $LOG_FILE
$WP_CLI backwpup start $JOBID >>& $LOG_FILE
echo "" >> $LOG_FILE
echo "### Plugin Update ###" >> $LOG_FILE
echo "" >> $LOG_FILE
$WP_CLI plugin update --all >>& $LOG_FILE
echo "" >> $LOG_FILE
echo "### Core Update ###" >> $LOG_FILE
echo "" >> $LOG_FILE
($WP_CLI core update --force --locale=$WP_LANG && $WP_CLI core update-db) >>& $LOG_FILE
echo "" >> $LOG_FILE
echo "### Plugin update after Core Update ###" >> $LOG_FILE
echo "" >> $LOG_FILE
$WP_CLI plugin update --all >>& $LOG_FILE
echo "" >> $LOG_FILE
echo "End Log at `date +%Y%m%d.%H:%M:%S`" >> $LOG_FILE
echo "---" >> $LOG_FILE
exit
usage:
echo "Usage: $0 WordPressフォルダ BackWPUPのジョブID 言語"
exit
====
とまぁ、ざっとこんな感じでしょうか。
本体更新は怖いと思われるかもしれませんが、昔と異なりかなり頻繁にアップデートされているので、メジャーバージョンアップもそれほど怖くはありません。
心配なら、コアのアップデート部分と2つ目のプラグインアップデートの部分を消しておけばいいかなと思います。
また最初と最後にいつ始まって、いつ終わったのかをログに残したほうがいいよねぇということでそういった記載もいれてます。
cronに登録する際には
実際は
===== wp-auto-update-cron.csh =====
#!/bin/csh -f
cd wp-auto-update.cshのあるフォルダ
wp-auto-update.csh WordPressフォルダ BackWPUPのジョブID 言語
wp-auto-update.csh WordPressフォルダ BackWPUPのジョブID 言語
wp-auto-update.csh WordPressフォルダ BackWPUPのジョブID 言語
wp-auto-update.csh WordPressフォルダ BackWPUPのジョブID 言語
=====
とか管理するWordPressの分だけ列挙しておいて
wp-auto-update-cron.csh を cron に登録しておけばよいという感じになりますね。
CSHシェルスクリプトは実行権限つけるのをお忘れなく。
cronへの登録
crontab -e で編集モードにして
0 0 * * * /絶対パス/wp-auto-update-cron.csh
毎日0時に実行するなら上記を登録して
crontab -l
...
...
0 0 * * * /絶対パス/wp-auto-update-cron.csh
....
のように登録されていたらOKですね。
最後に
WP-CLIツールはそれ自体を自動アップデートすることができます。
新しい WordPressに対応していない WP-CLIバージョンを利用するのは、意図しない動作をして危険です。
/usr/local/bin/wp cli update --yes
をLinux cronにて毎日実行するように登録しておくことをお勧めします。
2016年6月2日 @kimipooh
2018年3月19日 一部修正
2018年5月30日 一部修正
2018年3月19日 一部修正
2018年5月30日 一部修正
0 件のコメント:
コメントを投稿