見る人が少ない WordPress で予約投稿が遅れる:サーバーの cron で WP-Cron を動かしてそろえる

トラブル・エラー対応
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

見る人が少ない WordPress のサイトで、予約投稿やプラグインの定期の処理が遅れていました。

WordPress の予定を動かす仕組み(WP-Cron)は、だれかがサイトを開いたときに動くためです。

この記事では、エックスサーバーの cron で WP-Cron を動かす設定を、管理しているサイトでそろえたときのことをまとめます。

WP-Cron が遅れる理由

WP-Cron は、ページが開かれたときに「時間が来た予定」があるかをチェックして、あれば動かします。

そのため、1 日に数回しか開かれないサイトでは、予約投稿の時刻を過ぎても公開されなかったり、プラグインの定期の処理がたまったりします。

キャッシュのプラグインの画面で「予定が遅れています」という警告が出て、気づきました。

サーバーの cron の一覧を見て分かったこと

同じサーバーに入っているサイトの cron を、まとめて見直しました。

見つかったこと どうなるか
cron が入っていないサイトがあった 見る人が少ないと、予定が遅れる
1 日 1 回だけ動かしているサイトがあった 予約投稿が、次の日の朝まで出ないことがある
閉じたサイトの行が残っていた 動かす必要のない処理が、10 分ごとに動き続ける

サイトを足したり閉じたりしたときに、cron の一覧まで直すのを忘れやすいと分かりました。

設定した形

サイトごとに、10 分ごとに WP-CLI で「時間が来た予定」を動かす形にそろえました。

/usr/bin/php8.3 /usr/bin/wp cron event run --due-now --path=/home/(ユーザー名)/(ドメイン)/public_html/(サイトのフォルダ) > /dev/null 2>&1

コマンドの /usr/bin/php8.3 と /usr/bin/wp は、エックスサーバーの場所です。ほかのサーバーでは場所が違うので、サーバーのマニュアルで確認してください。

分の欄は、ほかの処理と同じ分に重ならないよう、サイトごとに少しずつずらしました(例:5,15,25,35,45,55)。

気をつけたこと

  • エックスサーバーでは、cron で使う PHP のバージョンをパスで決める(/usr/bin/php8.3)。ただの php だと、管理画面でサイトに設定したバージョンではなく、サーバーの初期のバージョンで動くことがある
  • wp-config.php に DISABLE_WP_CRON が入っているサイトは、サーバーの cron がないと予定がまったく動かない。入っているかを先にチェックする
  • 出力は捨てる形にしたので、cron の画面からは動いたかが分からない。次の日に、遅れていた予定がなくなったかで確認する

まとめ

サイトを足すときの手順に「cron の行を足す」、閉じるときの手順に「cron の行を消す」を書き加えます。手順に追加しておけば、一覧の直し忘れを次の見直しまで持ち越しません。

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。