『WP-CLI』+『BackWPup』でWordPressをバックアップする方法

当ブログ久しぶりの『WP-CLI』ネタ。必要に迫られて、WordPressの定番バックアッププラグイン『BackWPup Free』を、WP-CLIから起動させるように仕込んでみました。

コマンドの基本形は「wp backwpup foo」

@miya0001さんの記事「WP-CLIのパッケージコマンドを自作」にあるように、WP-CLIは WP_CLI_Command クラスを継承することでオレオレコマンドを作れるようになっています。BackWPupも同様で、/inc/class-wp-cli.php 内に WP_CLI_Command クラスを継承した BackWPup_WP_CLI クラスがあり

  • start …… ジョブの起動
  • abort …… ジョブの停止
  • jobs …… ジョブの一覧表示
  • working …… 動作中のジョブの表示

という4つのメソッドが実装されています。

なので、たとえばID 1のジョブを黒い画面で実行したいときは

wp backwpup start 1

と入力して

ッターン!

とenterキーをたたけばあらかじめ設定したジョブが始まる、というわけです。

cronでWP-CLI+BackWPupのコンボをキック

「必要に迫られて」の本題は、実はここから。

このプラグイン、どうやら、2015年2月からサービスが始まった『さくらのレンタルサーバ』の独自SSL(SNI SSL〔ネームベース〕)との相性がよろしくないのです。

通常ならバックアップ等のジョブを設定し、ジョブを始めるタイミングを「with WordPress cron」にしたうえで時刻を適宜設定すればよいのですが、試しにジョブを走らせてみますと……

てなリダイレクトループがかかってしまうのです。それ以前に、さくらのレンタルサーバ+SNI SSL環境下でWordPressを動作させるにはちょっとコツが必要で、公式フォーラムにもたとえばこんなトピックが立っています。

そこで、もともとこのサーバにWP-CLIを入れていたこともあり、さくらのレンタルサーバに用意されているcron(管理画面から5つまで登録可)を使い、WP-CLIを介してジョブを走らせようと考えたわけです。


[2017.4.4追記]
さくらのレンタルサーバ(ビジネス)+SNI SSL環境下で『BackWPup Free』 3.3.7 を走らせてみたところ、管理画面からのジョブ実行で問題なく動作しました。もろもろの問題解決したんでしょうかね?

(以下、初出の内容ですがご参考までに残しておきます)


ちなみに、さくらのレンタルサーバへのWP-CLI導入は拙作スクリプトを使用。/home/ユーザディレクトリ/usr/local/bin 内にWP-CLI本体を配置しました。

cronでのBackWPup制御は2つの手順で行います。無保証につき、ご利用は計画的にどうぞ。

  1. 「wp backwpup start {job_id}」を書いたシェルスクリプトの作成
  2. さくらのレンタルサーバの管理画面でcronを登録

シェルスクリプトの作成

こんな感じで書きました。/home/{user_dir}/www/path/to/wordpress/ はWordPressのインストールディレクトリ、{job_id} はBackWPupで設定したジョブのIDです。

#!/bin/sh
cd /home/{user_dir}/www/path/to/wordpress/
/usr/local/bin/php /home/{user_dir}/usr/local/bin/wp backwpup start {job_id}

ハマりポイントだったのは「wp backup start {job_id}」の制御。単純にコマンドラインで実行するなら

wp backup start {job_id}

でいいのですが、cronで制御する場合はWP-CLIそのものをPHPスクリプトとして動作させる必要がありました(「/home/{user_dir}/usr/local/bin/wp backup start {job_id}」だと、 env: php: No such file or directory というエラーが返ってきてしまう)。

できあがったら、ファイル名を backwpup.sh として、ユーザディレクトリ内の適当な場所にアップロードします(ここでは /home/{user_dir}/ 直下に置きました)。viが使える方は、サーバにSSHログインして直接作成してもよいですね。いずれにしても backwpup.sh を実行権のあるパーミッションにすることをお忘れなく。

cronの登録

管理画面のサイドバーにある[CRONの設定]をクリックし、

[新規項目の追加]をクリックした後、「実行コマンド」欄に

/home/{user_dir}/backwpup.sh 1> /dev/null

と入力、実行時刻を設定した上で[送信]をクリックします。ちなみに「 1> /dev/null」がある場合は実行結果(=標準出力)がpostmasterにメールされず、ない場合は実行結果がメールされます。適宜使い分けてください。念のため、現在時刻の数分後に実行時刻を設定して動作テストするのがよいでしょうね。

ということで、ここでは実行コマンドとシェルスクリプトを分けて設定しましたが、「実行コマンド」欄にワンライナーでまとめて書いちゃってもよいでしょう。

それではハッピーなWP-CLIライフを!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です