Cloudways服务器crontab执行WP-CLI命令报wp-salt.php缺失错误
解决Cloudways服务器上WP-CLI通过crontab执行报wp-salt.php缺失的致命错误
问题场景
在Cloudways服务器上,将WP-CLI命令配置为crontab定时任务时出现异常:
- 终端直接运行带绝对路径的命令
/usr/local/bin/wp migratedb profile [id] --path=/absolute/path/to/wordpress/core/files完全正常 - 但添加到crontab后执行时触发PHP致命错误:
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 --info外,所有WP-CLI命令通过crontab执行都会触发该错误,尝试过重新下载WP-CLI、修改文件权限、更换执行用户、直接用PHP运行wp-cli.phar均无效。
核心原因
crontab的执行环境与交互式终端存在本质差异:默认工作目录为用户家目录,缺少终端加载的部分环境变量(如PATH、PHP_INCLUDE_PATH),导致WP-CLI加载WordPress配置时无法解析相对路径的依赖文件。
具体解决方法
1. 先切换到WordPress根目录再执行命令
crontab默认工作目录不是WordPress核心文件所在路径,添加cd命令切换目录后执行WP-CLI:
* * * * * cd /absolute/path/to/wordpress/core/files && /usr/local/bin/wp migratedb profile [id]
此方法让WP-CLI在正确的工作目录下运行,能识别wp-config.php中相对路径引用的wp-salt.php。
2. 用登录式bash加载终端环境变量
crontab默认以非交互式shell运行,缺少终端的环境配置。使用bash -l强制加载用户的登录环境(读取~/.bash_profile等配置):
* * * * * bash -l -c '/usr/local/bin/wp migratedb profile [id] --path=/absolute/path/to/wordpress/core/files'
3. 将wp-config.php中wp-salt.php的引用改为绝对路径
打开WordPress根目录下的wp-config.php,找到引用wp-salt.php的代码行,把相对路径替换为绝对路径:
// 原代码可能类似:require_once('wp-salt.php'); // 修改为绝对路径 require_once('/absolute/path/to/wordpress/core/files/wp-salt.php');
此方法彻底避免工作目录对文件路径解析的影响。
4. 在crontab中直接设置必要的环境变量
在crontab的开头添加环境变量配置,确保WP-CLI能找到正确的依赖路径:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PHP_INCLUDE_PATH=/absolute/path/to/wordpress/core/files:/usr/share/php * * * * * /usr/local/bin/wp migratedb profile [id] --path=/absolute/path/to/wordpress/core/files
验证方法
可以先测试简单的WP-CLI命令(如wp option get home),替换到crontab中执行,确认能正常返回结果后,再替换为目标的migratedb命令。
内容的提问来源于stack exchange,提问作者mi-aluanich
相关产品推荐
相关产品推荐

