BackWPupエラーがジョブの開始方法をリンクにしたら解決した話

WordPress
スポンサーリンク

WordPress のバックアップで定番のプラグイン BackWPup のエラーが PHPのメモリ上限を調整しても、BackWPup の設定をいじくりたおしても、どうにもこうにも解消しなかったのですが、ふとしたことから BackWPup のジョブの開始方法を「リンク」にしたら解決しました。珍しいケースかもしれませんが、せっかくなので設定方法などを記事にまとめてみました。

BackWPup のエラー

数ヶ月ほど前から、BackWPup から、オンラインストレージの AWS S3 にアップロードするところで、ジョブが止まってしまい、下のような警告やエラーが発生するようになりました。

BackWPupのエラーログ

ほとんどの場合は、PHPのメモリ上限を増やす、WordPressのメモリ上限を増やす、BackWPup の設定で、サーバーの負荷を軽減する、最大スクリプト実行時間を増やす、などで解決するようなのですが、どれをやってもエラーが解消しません。

手動でジョブを実行すると成功する

ただ、WordPress の管理画面から手動でジョブを実行すると、まったくエラーがなく実行できます。

WordPressの管理画面でジョブを実行

BackWPupのデバッグログで確認すると WordPress の管理画面から手動でジョブを実行した場合は、PHPスクリプトの最大実行時間と、スクリプトの再起動時間が有効になっていますが、WordPress の cron でジョブを実行した場合は、PHP CLI(コマンドライン)が使われるため PHPスクリプトの最大実行時間は無限(0)になり、スクリプトの再起動も無効になっています。

手動でジョブを実行した場合のデバッグログ
WordPressのcronでジョブを実行した場合のデバッグログ

どうもこのあたりにエラーの原因がありそうです。

ジョブの開始方法を「リンク」に変更

それなら定時に自動実行しているジョブも、手動でジョブを実行した場合と同じ条件で実行できればよさそうです。

BackWPup のジョブの開始方法「リンク」を使えば、手動でジョブを実行した時のように、PHPスクリプトの最大実行時間と、スクリプトの再起動時間が有効になりますので、これを使います。

URLで外部からジョブを開始するキーの設定

ジョブの開始方法「リンク」は、指定されたURLにアクセスすれば誰でもジョブを実行できてしまいますので、URLをある程度複雑にしておく必要があります。

BackWPup →「設定」→「ジョブ」、「URL で外部からジョブを開始するキー」に複雑な文字列(英数大文字小文字を含んだ40文字以上)を入力して「変更を保存」をクリックします。

URLで外部からジョブを開始するキーの設定

ジョブの開始方法を「リンク」に変更

BackWPup →「ジョブ」で定時に自動実行しているジョブの編集をクリックします。

自動実行しているジョブの編集をクリック

「スケジュール」を選択して、ジョブの開始方法を「リンク」に変更し、「変更を保存」をクリックします。表示されているURLをコピーしておいてください。

ジョブの開始方法を「リンク」に変更

サーバーの crontab などで、定時にリンクのURLにアクセスするように設定します。下の例では実行ユーザーを apache に設定していますが、コマンドを実行できればどのユーザーでも構いません。

$ sudo vi /etc/crontab
(以下を追加)
30 05 * * * apache /usr/bin/curl -s 'https://<リンクのURL>'

最後に、BackWPupのログでエラーが発生していないことを確認します。

BackWPupのログ(エラーなし)

おわりに

久しぶりに BackWPup の設定をいじってみましたが、ログレベルの設定や、サーバーの負荷を軽減する機能など、無料とは思えないくらい気の利いた設定ができます。BackWPup には長年お世話になっていますが、あらためて素晴らしいプラグインだと実感しました。

コメント

タイトルとURLをコピーしました