WordPress每日Cron事件配置后无日志生成问题求助
排查步骤与问题修复
1. 先修复钩子名称不匹配的核心错误
你的代码里存在钩子名称不一致的致命问题:
- 调度事件时用的是
mxpbiz_cron_hook:wp_schedule_event( time(), 'every_day', 'mxpbiz_cron_hook' ); - 但绑定执行函数时用的是
myprefix_cron_hook:add_action( 'myprefix_cron_hook', 'myprefix_cron_check_expired' );
这会导致调度的事件找不到对应的执行逻辑,直接修改其中一方让两者名称统一即可,比如把调度代码改成:
if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) { wp_schedule_event( time(), 'every_day', 'myprefix_cron_hook' ); }
2. 验证crontab的wget命令是否真的执行了
- 查看系统crontab日志(通常在
/var/log/cron或/var/log/syslog),确认5 0 * * * /usr/bin/wget https://example.com/wp-cron.php这条指令是否按时触发 - 手动执行该wget命令,测试能否正常访问wp-cron.php:
/usr/bin/wget https://example.com/wp-cron.php
如果执行失败,排查域名解析、服务器防火墙、WordPress站点是否正常运行等问题
3. 检查日志目录的权限
- 确认
/var/log/private目录存在,且Web服务器进程(通常是www-data、apache或nginx用户)拥有写入权限 - 手动测试写入权限:
sudo -u www-data touch /var/log/private/checked.log
如果命令失败,调整目录权限:
sudo chown www-data:www-data /var/log/private sudo chmod 755 /var/log/private
4. 验证WordPress Cron的基础设置
- 检查
wp-config.php中是否禁用了WP Cron:如果存在define('DISABLE_WP_CRON', true);,要确保你的手动crontab调用是唯一触发方式,同时确认该定义没有阻止事件执行 - 可以安装WP Crontrol这类插件,查看已调度的事件列表,确认
myprefix_cron_hook是否被正确添加到调度中
5. 调试函数执行情况
- 修改
myprefix_cron_check_expired函数,写入到更易访问的路径(比如WordPress根目录),排除路径问题:function myprefix_cron_check_expired() { $log_path = ABSPATH . 'cron_debug.log'; file_put_contents( $log_path, "checked cron " . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND); } - 手动访问
https://example.com/wp-cron.php?doing_wp_cron,强制触发WP Cron,之后检查日志是否生成
内容的提问来源于stack exchange,提问作者Luigino
相关产品推荐
相关产品推荐

