バックアップが動かない原因と確認方法

実測 に検証

バックアッププラグインを入れてある。しかしいつ取れたのか分からない。 管理画面を見ると「次回のバックアップ」の日時が過ぎたままになっている。

UpdraftPlus(1.26.8)と BackWPup(5.7.6)を入れて、 どこまでが自動で、どこからが手動なのかを測りました。 あわせて、取れたバックアップが外から取れるかどうかも確認しています。

実測環境#

WordPress 7.1 / PHP 8.2。この環境はループバックが通りません。

loopback 失敗: cURL error 7: Failed to connect to localhost:8080

ループバックとは、サイトが自分自身に HTTP リクエストを投げる仕組みのことです。 WP-Cron はこれで動くため、通らない環境では定期処理が一切動きません。 → 予約投稿されない

レンタルサーバーでも、Basic 認証・WAF・CDN 経由の構成で同じ状態になります。

実測 1: 入れただけでは何も予約されない#

有効化した直後に、登録された定期処理を数えました。

プラグイン有効化直後に増えた定期処理バックアップの予約
UpdraftPlusupdraftplus_clean_temporary_files(12 時間ごと)無し
BackWPupbackwpup_check_cleanup(12 時間ごと)無し

どちらも掃除用の処理が増えるだけです。 「入れた=バックアップが始まる」ではありません。

BackWPup は「ジョブが 1 件あるのに無い」#

BackWPup は有効化時に First backup という雛形ジョブを作ります。 しかし画面にもコマンドにも出てきません。

BackWPup の画面。「Ready to set up your first backup?」と出てジョブ一覧が空

有効化した直後の画面。内部に雛形はあるが、設定は何も終わっていない

理由はフラグでした。雛形には tempjob が立っていて、 一覧を作る処理がこれを除外します。

確認結果
内部のジョブ一覧(get_job_ids())1 件(First backup)
管理画面のジョブ一覧0 件(セットアップの案内が出る)
コマンドのジョブ一覧0 件
予約(backwpup_cron)未登録

tempjob を外すと、コマンドの一覧には出るようになりました (cron = 0 0 1 * * = 毎月 1 日 0 時、last_run = never)。 それでも予約は入りません。

予約は「掃除の処理」が入れている#

BackWPup の予約は、ジョブを作った時ではなく 12 時間ごとの掃除の処理(backwpup_check_cleanup)が走ったときに登録されます。

実測しました。

操作backwpup_cron の予約
ジョブを有効な状態にした直後無し
backwpup_check_cleanup を実行した後2026-09-30 15:00 に登録

その掃除の処理自体も WP-Cron で動きます。 つまりループバックが通らない環境では、 予約が入る前の段階で止まります。

実測 2: 予約しても、時間が来ても走らない#

UpdraftPlus で日次のスケジュールを設定しました。予約は入ります。

updraft_backup           1 日ごと
updraft_backup_database  1 日ごと

ここで予約時刻を過去にずらし、サイトに 3 回アクセスしました。 WP-Cron は「誰かがアクセスしたとき」に起動する仕組みだからです。

バックアップのファイル数
アクセス前6
アクセス後6(増えない)

1 つも実行されませんでした。ループバックが通らないためです。

管理画面にはこう出ていました。

Next scheduled backups:
  Files:    日, 9月 27, 2026 00:39
  Database: 金, 9月 25, 2026 00:39
  Time now: 土, 9月 26, 2026 01:43

データベースの予定は 9 月 25 日なのに、今は 9 月 26 日です。 画面に「次回」と書かれていても、過ぎた日時のまま止まっていることがあります。 ここが「取れているつもり」の正体です。

実測 3: 手動なら完走する#

同じ状態で、コマンドから直接実行しました。

結果
UpdraftPlus(updraft_backup を実行)348 秒で完了。ファイルが 6 → 12 に増えた
BackWPup(ジョブを直接実行)136 秒で完了。145.59MB・5,445 ファイル

処理そのものは正常です。壊れているのは「実行のきっかけ」だけ、と確定できます。

対策は予約投稿と同じで、サーバーの cron から叩くことです。

*/15 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null

wp-config.php に define( 'DISABLE_WP_CRON', true ); を入れる場合は、 サーバー側の cron 登録を必ずセットで行います。片方だけだと全部止まります。

実測 4: 取れたバックアップは外から取れる#

置き場所と、未ログインでの到達性を測りました。 別記事で測った All-in-One WP Migration も並べます。

プラグイン置き場所保護nginxApache
All-in-One WP Migrationwp-content/ai1wm-backups/拒否なし200200
UpdraftPluswp-content/updraft/.htaccess に deny from all200403
BackWPupuploads/backwpup/<ランダム6文字>/backups/.htaccess に Require all denied200403

3 つとも nginx では素通りです。.htaccess は Apache しか読まないためです。

実際に未ログインで取得できた中身です。

取得したものサイズ中身
UpdraftPlus の -db.gz170,421 バイト展開して約 1MB。CREATE TABLE が 31 個、wp_users の INSERT あり
BackWPup の .tar152,667,648 バイトwp_lab.sql と wp-config.php を含む

BackWPup のアーカイブには wp-config.php が入っていました。 データベースの認証情報と認証キーが書かれているファイルです。 → 設定ファイルは漏れるのか

nginx を使っているなら、サーバー設定で塞ぎます。

location ~* /wp-content/(updraft|ai1wm-backups)/ { deny all; }
location ~* /wp-content/uploads/backwpup/         { deny all; }

保存先を公開領域の外に置ける設定があるなら、そちらが確実です。 → .wpress は未ログインで取得できる

実測 5: 消しても設定は残る#

両方のプラグインを削除したあと、残ったオプションを数えました。

接頭辞残っていた件数
updraft29 件
backwpup32 件

uploads/backwpup-restore というディレクトリも残りました。

削除しても設定は消えません。入れ替えを繰り返したサイトでは、 使っていないプラグインの設定が wp_options に積もります。 起動のたびに読み込まれる設定が増えると表示が遅くなります。 → WordPress が重い

確認の順番#

# 1. バックアップの予約が入っているか
wp cron event list | grep -iE 'updraft|backwpup'

# 2. 予定時刻が過去になっていないか(過去のまま = 動いていない)
wp cron event list --fields=hook,next_run_relative | grep -iE 'updraft|backwpup'

# 3. ループバックが通るか
wp eval '$r = wp_remote_get( site_url( "/wp-cron.php" ), array( "timeout" => 5 ) );
echo is_wp_error( $r ) ? "失敗: " . $r->get_error_message() : "成功";'

# 4. 取れたファイルが外から取れないか
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/wp-content/updraft/
観測意味
予約が 1 件も無い設定が終わっていない。プラグインを入れただけの状態
予定時刻が過去のままWP-Cron が動いていない。ループバックを確認する
手動実行は成功する処理は正常。きっかけだけの問題。サーバーの cron から叩く
置き場所が 200 で返るバックアップが公開されている。サーバー設定で塞ぐ

「次回のバックアップ」の日時が過ぎていないかを見るのが、 いちばん早い確認方法です。

再現手順#

wp plugin install updraftplus --activate
wp plugin install backwpup --activate

# 入れただけの状態で予約を数える
wp cron event list --fields=hook,recurrence | grep -iE 'updraft|backwpup'

# UpdraftPlus に日次スケジュールを入れる
wp eval '$GLOBALS["updraftplus"]->schedule_backup("daily");
$GLOBALS["updraftplus"]->schedule_backup_database("daily");'

# 予約時刻を過去にずらしてサイトにアクセスする(実行されない)
for i in 1 2 3; do curl -s -o /dev/null http://localhost:8080/; sleep 3; done
ls wp-content/updraft/backup_* | wc -l

# 手動実行(完走する)
wp cron event run updraft_backup

# BackWPup の雛形ジョブ
wp eval 'echo count(BackWPup_Option::get_job_ids()), "\n";'   # 1 件
wp backwpup job                                                # 0 件
wp eval 'BackWPup_Option::update(1, "tempjob", false);'
wp cron event run backwpup_check_cleanup                       # ここで予約が入る
wp backwpup run 1 --now

# 外から取れるか
curl -s -o /dev/null -w '%{http_code}\n' "http://localhost:8080/wp-content/updraft/<ファイル名>"
curl -s -o /dev/null -w '%{http_code}\n' "http://localhost:8082/wp-content/updraft/<ファイル名>"

検証で入れた 2 つのプラグイン、生成したアーカイブ、登録された定期処理は削除済みです。