You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress无法通过Cron Job执行Shell脚本,需每日拉取GitHub更新

WordPress Cron无法执行Shell脚本的解决办法

核心问题排查方向及修复步骤

1. 补全绝对路径

WP Cron的运行环境和手动执行时的工作目录不一致,相对路径大概率找不到脚本。直接用WordPress内置常量生成绝对路径:

function execute_shell_script() {
    // 用WP_PLUGIN_DIR直接拿到插件目录的绝对路径
    $script_path = WP_PLUGIN_DIR . '/github_install.sh';
    // 后续执行逻辑...
}

或者直接写服务器完整路径,比如/home/your_username/site/public_html/wp-content/plugins/github_install.sh。

2. 捕获执行日志排查错误

shell_exec默认不返回错误信息,无法定位问题。改成以下写法,把执行日志存到文件里:

function execute_shell_script() {
    $script_path = WP_PLUGIN_DIR . '/github_install.sh';
    // 强制用bash解释器,同时捕获所有输出(包括错误)
    $result = shell_exec("bash {$script_path} 2>&1");
    // 把日志写入插件目录,记得给这个日志文件开写权限
    file_put_contents(
        WP_PLUGIN_DIR . '/cron_script_log.txt',
        date('Y-m-d H:i:s') . ': ' . $result . PHP_EOL,
        FILE_APPEND
    );
}

查看日志就能明确是权限不足、Git命令找不到还是其他问题。

3. 修复权限与运行用户问题

  • 给脚本加可执行权限:SSH里执行chmod +x /path/to/github_install.sh
  • WP Cron由Web服务器用户(比如www-data、apache)运行,需确保该用户能:
    • 执行脚本:sudo -u www-data /path/to/github_install.sh 测试能否正常运行
    • 访问GitHub:如果脚本用Git拉取,要给Web用户配置SSH密钥(放在/var/www/.ssh目录),或者使用带token的HTTPS免密仓库地址

4. 解决WP Cron的触发问题

WP Cron依赖网站访问触发,若网站长时间无访客,任务不会执行。可采取:

  • 用主机商的Cron工具(比如cPanel)定时触发WP Cron,命令写:
    wget -q -O - https://你的域名/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    
  • 用WP Crontrol插件管理Cron,确保任务被正确调度

5. 脚本内的命令用绝对路径

手动执行时你的环境变量能找到git这类命令,但Web用户的环境变量可能没有。先查Git的绝对路径:which git,然后在脚本里替换成绝对路径,比如/usr/bin/git pull origin main


内容的提问来源于stack exchange,提问作者mat4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:42:29