🌞

Wordpress6.8.1とcron

に公開

Wordpress6.8.1とcron

2025-05-23

變更履歷《へんこうりれき》
2025-06-01

  • (2)'追加

イントロ:

久しぶりに Wordpress (ver. 6.8.1) 上に、豫約《よやく》。
時閒《じかん》になっても動いていない。
そういえば前回の豫約は Wordpress 6.5.5 の時だった。
Wordpress 6.5.5 の時は動いていたよね〜。なぜ?

ChatGPTが賢かった。


(1).何が起きたか

  • php wp-cron.php doing_wp_cron=1 が、DB connection エラー
    • crontab に書いていた
    • wp-config.php には define('DISABLE_WP_CRON', true);

(2).ChatGPTのお告げ

探しても、原因や解決策がみあたらず。
ChatGPTに聞くと、以下のお告げが!

// なお。ChatGPTの解答の真僞《しんぎ》のほどや詳細がどこまで正確か追っていない。
// よってどこまで本當《ほんとう》の事かは、みなさんに丸投げいたす。


Q1. えーん、wp-cronが動かなくなったよ〜

ChatGPT>

WordPress 6.7〜6.8 にかけて、以下のような変更が加えられています:
・wp-cron.php の実行時の 実行コンテキスト の強化(CLIかWebか)
・HTTP 経由と CLI 経由での処理の違いが増えた
・DB 接続やマルチサイト環境での URL 取得に関して、CLI 環境で $_SERVER が不完全だと不具合が出ることがある


おどろき!



Q2.workaround 出して〜

ChatGPT>

HTTP_HOST=example.com php -d register_argc_argv=On wp-cron.php
や
SERVER_NAME=example.com SERVER_PORT=443 REQUEST_METHOD=GET php wp-cron.php
がある



ほほぅ。そのようなやり方があるのか。
どれどれ......相変わらずDBエラー。


Q3.だめだ。なぜかDBエラーが解消しない

ChatGPT>

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
をためしてみてください




結果:mysqli_real_connect()で死んでいた。




え?なぜに?
それ以前に、Wordpress は mysqli だった事に驚き!
ああ、そうだっけ。言われてみれば Wordpress 4 の時、そんな事があったような。昔の事は忘れた。

php.ini のデフォルトや wp-config.php の設定、ソケットファイルの記述が違うのね。
いやおかしい。
なぜなら Apache 2.4 で現に Wordpress が動いている。
にもかかわらず、phpコマンドでソケットファイルが違うというのは考えにく.......



Apache 2.4 の PHP が version 8.2
コマンドラインの php が version 8.4
..... _| ̄|○ ガックリ ...... //⇐どうじゃ!古い表現じゃろ!



ああ、apt update のとき、8.4にかわったものの、Apache は PHP 8.2 をキープしてたのね。
PHP 8.4 の設定なぞ、しておらぬわ。

define('DB_HOST', 'localhost:/var/run/mysql.sock');

// ソケットファイル、/var/run/mysqld/mysql.sock やら /var/run/mysqld/mysqld.sock やら /var/run/mysql/mysql.sock やら /var/run/mysql/mysqld.sock やら濫立《らんりつ》していて疲れるのよね


しかしうまくうごかない


Q4.workaround 出して〜

ChatGPT> WordPress 6.8 系では、wp_load.php → wp-includes/load.php 内の wp_guess_url() や DB 初期化部分で、CLI 実行時に URL やホスト情報が正しく推定できないため、DB内の siteurl が取得できずに失敗しているケースが複数報告されています。

ChatGPT> WordPress 6.8.1 は「CLI からの実行」で $_SERVER['HTTP_HOST'] 等が無いと、siteurl や home を取得できずに DB エラーになる仕様変更が行われたようです。
CLI 実行時にも Web 環境に似た変数を強制的に定義しているため、完全に WordPress に「HTTP 経由でアクセスされた」と誤認させる形で動作させています。

ChatGPT> カスタムスクリプトを作って、WordPress を「CLIでもWebに見せかけて」実行します。

ChatGPT> cron-runner.php を作成

<?php
// Webサーバー環境を模倣するための $_SERVER 定義
$_SERVER['HTTP_HOST']       = 'example.com';       // ←自サイトのドメイン
$_SERVER['REQUEST_METHOD']  = 'GET';
$_SERVER['SERVER_PORT']     = 443;                 // HTTPS の場合
$_SERVER['HTTPS']           = 'on';
$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
$_SERVER['SCRIPT_NAME']     = '/wp-cron.php';
$_SERVER['REQUEST_URI']     = '/wp-cron.php';
$_SERVER['REMOTE_HOST']     = '127.0.0.1';
$_GET['doing_wp_cron'] = microtime( true ); //※a ⇐chatGPTが後から追加してきた

define('ABSPATH', '/dokosoko/no/directory/'); // ⇐これは筆者が追加

// WordPress を読み込みつつ wp-cron を直接実行
// require_once __DIR__ . '/wp-load.php';
require_once ABSPATH . 'wp-load.php'; // ⇐これは筆者がかえた

// Cron 実行用フラグ
// define('DOING_CRON', true); ※a ⇐chatGPTは記述したが動かなくなる。筆者修正

require_once ABSPATH . 'wp-cron.php';

//ファイルおわり

crontab に php cron-runner.php を書いて解決。

ありがとう、ChatGPT。


(2').とはいったもののダメだった

あれ?やっぱり動いていない。
wp-cron.php をみると

wp-cron.php
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
	die();
}

/**
 * Tell WordPress the cron task is running.
 *
 * @var bool
 */
define( 'DOING_CRON', true );

ダメだよね、これ。どうみても。

ということで、chatGPTの cron-runner.php を少々變えた。
上記 ※a 部分。自分で變更した物と、chatGPTに再質問して出てきた物。


(3).感想

AIについて:

今回のように、どこまで正しいかはおいておいて、レアな情報を探す時は、AIはありがたいなと感じている。日本語のwebサイト檢索《けんさく》は、あまり最新・深い話は出てこない。しかしガッツリ英語で探すと時閒《じかん》がいくらあっても足りない。

  • 人が檢索エンジンを驅使《くし》して探すより、ChatGPT に聞く方がはやい。
  • 膨大な情報から欲しい物を探すときに有效《ゆうこう》。
    • 例:膨大なマニュアルから、今自分がなやんでいる部分を探し出す時に有效。
      • LibreOffice 、google docs 、google spreadsheetの函數《かんすう》説明 など、どこをどうのように探し、讀《よ》み、頭の中でつなげるかが問題。ものすごく時閒をかけるわりには、欲しい情報が出てこないことが多い。量が多い、文章がよくわからない、圖解《づかい》していないため、正直よくわからない。マニュアルに書いてあると言う人もいるだろうが、どこに?となる。このような場面、AIはよく働いてくれる。

なお、膨大なナレッジベースの檢索であれば、AIは全てよく動くかといえばさにあらず。
ChatGPT と Gemini に以下を聞いたことがある。
Geminiは自信をもって斷言《だんげん》していた。事實《じじつ》では無い事を。

  • 1990年3月21日、ポーランドに関係して起きた政治・軍事上のイベントは何かあるか?
    ChatGPT回答> 特に記録されていません。
    Gemini回答> ワルシャワ条約機構からの離脱を宣言しました。間違いありません。
    私>資料はあるか?
    Gemini回答> これです
      みたら、ポーランドの黨《とう》の月報の日本語譯《やく》で、1990年3月21日より前の物だった。だめじゃん。
    事實は、ワルシャワ條約機構から離れるのはもう少し後の事になる。

『1インチの攻防 (NOT ONE INCH)』 2024年 によると、こっそり政府關係者《かんけいしゃ》がNATO事務所に行っていたらしい。この話もどこまで正確かは知らない。
ともかく、ChatGPTの回答がマシだった。Geminiの信用度は今後のトレーニング・精査次第なのでしょう。
それと、「間違いありません」は誰がトレーニングしたのだろう?誤情報ひろげる元だよね〜。

"AIの、「間違いない」は、〇〇〇〇〇"
五音入れて川柳を完成させよう!


おわり

Discussion