WordPressという地獄を生き抜く

wp-cronの挙動とWordPressを記事管理ツールとして使う時の注意

本ブログは、WordPressを「記事の管理のみ」で使って、フロントエンド(サイトの表示)は、Cloudflare Pagesでホスティングしています。

自分の経験上、WordPressはデータが壊れることがよくあるので(WordPress本体というより、サードパーティのプラグインやテーマに起因することが多いイメージ)、定時バックアップのためにUpdraftPlusというプラグインを使っているのですが、こいつが定時で動いてくれない。

ということで、原因を探ってみました。

UpdraftPlusが使っている「wp-cron」とは?

前にUpdraftPlusをってたとき(5年くらい前でうろ覚え)は定時で実行されていなのになぁと思って、仕組みを調べてみたところ、WordPress標準のwp-cronというのを使っているそうです。

このwp-cronが何かというと、指定したジョブを「何かしらのWordPressサイトへのアクセスがあった時に実行する」仕組みとのこと。

つまり、自分のアクセスでも他人のアクセスでもなんでもいいから、WebサーバーでWordPressが実行された時に、その時間までに予約されたジョブがあったら実行するってことですね。(せっかくの訪問者さんのページ表示のための時間にそんなことしないで欲しいんですが。。。)

Webサーバーはクライアントからリクエストが来ないと動作しないのに、「cron」とはどういう仕組みだ?と思っていたら、やってることは単純ですね。

CMSとして使う場合、フロントを切り離すのでアクセスがほぼない

で、当サイトについてはCMSとして使っていて、フロントはサーバーレスにあるので、WordPressは管理画面を開かない限りwp-cronを実行できない。wp-cronはブラウザで管理画面を開いていれば、何かしらのバックグランド処理と合わさって実行されるんだけど、ブラウザを閉じるとダメということです。

じゃあ、なんで前のWordPressサイトは大丈夫だったのかというと、「WordPressのフロントに毎時間アクセスがあったから」ということですね。

もし、WordPressのサイトでUpdraftPlusを入れたのに定時バックアップができてない人がいたら「指定した時間間隔でアクセスが来ているか?」を調べてみてください。きっとアクセスがないはずです。

wp-cronを確実に定時で実行する方法

これは、簡単です。

WordPressサイトのどっかをcronでcurlとかでGETすればいいんです。cronを実行できるサーバーがないなら、Google Cloud Platformの「Cloud Scheduler」を使ってもいいと思います。無料で使えます。

Cloud Scheduler | Google Cloud Platform

Google Cloud Platformはクレジットカードがないと使えませんが、VISAがあればいいので、銀行カードのデビットVISAとかも問題ないはずです。新規で作るなら、PayPay銀行(旧ジャパンネット銀行)か楽天銀行がいいんじゃないでしょうか。

ジャパンネット銀行 - PayPay銀行

楽天銀行(旧イーバンク銀行)

メガバングは休眠口座から手数料を取る方向ですからね。

UpdraftPlusで定時バックアップされていない?

これも同じ理由です。「wp-cronが実行されてない = サイトへのアクセスがない」ということなはずですので、定時でWordPressサイト(トップページでも、wp-adminでもなんでも良い)が表示されれば、UpdraftPlusで定時バックアップがされるはずです。

UpdraftPlusは有料プランじゃないと「バックアップの時間指定」ができませんが、フロントを切り離している場合は、Cloud Schedulerを使って「バックアップ起動させたい時間」にアクセスすれば、実質的に時間指定でバックアップができます。

まあ、WordPressサイトの場合、表示のコストが圧倒的に高いので、当サイトのようにCMSとしてだけ使っている場合は負荷は微々たるものなので、毎時バックアップとかでも問題ないと思いますけどね。