這個問題旨在作為其他人查找的資訊帖子,因為幸運的是我已經找到了解決方案。
我嘗試在 Cloudways 伺服器上的 crontab 中將 Wordpress-CLI 命令作為 cron 作業運行。該命令直接在終端機中運行沒有任何問題,但在使用 crontab 啟動時失敗並出現致命 PHP 錯誤。
Wordpress-CLI 的基本指令如下:
wp migeratedb 設定檔 [id]
#由於 crontab 運行的上下文通常未知,且 $PATH 變數可能不可用,因此我修改了命令以提供必要的絕對路徑:
/usr/local/bin/wp migeratedb 設定檔 [id] --path=/absolute/path/to/wordpress/core/files
同樣,從終端機啟動時,這個修改後的指令也可以完美運行,沒有任何問題。
最終的 crontab 條目看起來像這樣:
0 5 * * * /usr/local/bin/wp migeratedb 設定檔 [id] --path=/absolute/path/to/wordpress/core/files
#當從調度程式執行時,它會產生以下錯誤:
PHP Fatal error: require(): Failed opening required 'wp-salt.php' (include_path='.:/usr/share/php') in phar:///usr/local/bin/wp/vendor/wp-cli/config-command/src/Config_Command.php(444) : eval()'d code on line 34
經過一些實驗,我意識到所有 WP-CLI 指令都會發生這個錯誤,除了非常基本的
wp --info
#,產生以下輸出:
OS: Linux 4.19.0-21-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64 Shell: /bin/sh PHP binary: /usr/bin/php7.4 PHP version: 7.4.33 php.ini used: /etc/php/7.4/cli/php.ini MySQL binary: /usr/bin/mysql MySQL version: mysql Ver 15.1 Distrib 10.4.20-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 SQL modes: WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli WP-CLI vendor dir: phar://wp-cli.phar/vendor WP_CLI phar path: [absolute/path/to/user/home/directory] WP-CLI packages dir: WP-CLI cache dir: [absolute/path/to/user/home/directory]/.wp-cli/cache WP-CLI global config: WP-CLI project config: WP-CLI version: 2.7.1
我還嘗試了以下改編,但沒有成功:
下載新的 wp-cli.phar 並將其用於命令。
檢視和變更已使用資料夾的所有權限
嘗試以其他使用者身分執行 cronjob
使用 /usr/bin/php
更改指令來執行 wp-cli.phar
P粉7901875072024-03-29 00:01:24
我終於發現這個錯誤與託管提供者(在本例中為 Cloudways)在 wp-config.php
檔案中設定 Wordpress 配置的方式有關。
鹽和秘密授權金鑰儲存在一個單獨的檔案中,即錯誤訊息中引用的wp-salt.php
。它可以透過以下方式直接在設定檔中引用:require('wp-salt.php')
。
由於這不是 WordPress 核心的一部分,並且 crontab 在不同的環境中運行,因此無法確定檔案所在的正確目錄,並且 require()
失敗並出現致命錯誤。
要修正此問題,請將wp-config.php
中的行變更為require(__DIR__.'/wp-salt.php');
,以便檔案始終從與設定檔相同的目錄中引用。
另一種選擇是完全刪除該行並將其替換為 wp-salt.php
檔案中的內容,就像 Wordpress 核心所做的那樣。