当前位置:首页 >  站长 >  建站经验 >  正文

wp-cron靠访问触发:无流量 WordPress 站点定时任务不执行

 2026-11-04 14:48  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

一个每天凌晨四点备份的站点,日志里连续十二天没生成新包。站点是新建的,日访问量不到二十,服务器负载和磁盘都正常。备份插件后台显示“下次执行:前一天凌晨四点”,日期一直往回滚,像是被什么东西卡住了。

WordPress没有系统级的定时器。wp-cron.php是一个普通PHP文件,只有在有页面访问时才可能被触发:每次有人打开站点,WordPress检查有没有到期任务,有就用一个异步请求去调它。没人打开页面,这个检查根本不会发生,队列里的任务就一直不跑。

新建站、内网测试站、刚上线还没推广的站,最容易撞上这一条。判断很快,看两处:插件列表里搜不到带系统定时字样的条目,服务器上crontab -l打出来是空的。两处都空,任务就一直挂在队列里,等下一次访问。

改法是把触发权交给系统。先在wp-config.php里加一行define('DISABLE_WP_CRON', true);,写在“That's all, stop editing!”那句注释之前,写在后面不生效。这一行只关掉由访问触发这一条路径,wp-cron.php本身仍然可以被访问,队列里的任务不会丢。

然后写系统任务。装了WP-CLI的机器用这条最省事:*/5 * * * * cd /www/wwwroot/example.com && /usr/bin/wp cron event run --due-now --quiet。没装WP-CLI就用curl或wget打一下wp-cron.php,带上doing_wp_cron参数,例如wget -q -O - 'https://example.com/wp-cron.php?doing_wp_cron=1',输出丢进/dev/null即可。两种写法都要用站点自己的用户跑,别用root,否则生成的文件属主变成root,后续上传和更新会报权限错误。

频率不要设成一分钟一次。每个周期启动一次PHP进程、加载整套WordPress,开销不小,五分钟一次对绝大多数任务够用。备份、推送、清理这类任务本身按小时或按天调度,跑得再勤也不会提前执行,只是白耗资源。WP-CLI那条命令里的cd不能省,cron执行时工作目录是用户的家目录,不切进去wp会找不到站点,报“Error: This does not seem to be a WordPress installation.”。

改成系统触发之后还有一处要跟着改。插件里原来设置了“错过时间就补跑”的,现在不会再补,因为系统cron跳过的那几次不会留下记录,队列里直接跳过。任务对时间敏感的,比如按日结算、按小时推送,把频率提到五分钟并加一把锁,写成*/5 * * * * flock -n /tmp/wp_cron.lock -c 'cd /www/wwwroot/example.com && /usr/bin/wp cron event run --due-now --quiet'。flock加-n的意思是拿不到锁立刻退出,两次执行重叠时后来那个直接放弃,不会两份备份同时往磁盘写。要是嫌wp-cron.php每次都要走一遍完整的WordPress启动,可以只让它在后台跑,前台请求那条路已经关掉了,不影响访问速度。

改完过一天再翻一次日志,连着出现十二天的空档会补上。你手上如果是日访问几百以上的站,wp-cron一直在正常工作,问题多半出在任务本身报错,那种去看插件的执行记录,换触发方式解决不了。

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
wp-cron
wordpress

相关文章

  • WordPress自动更新导致插件故障:问题排查与手动回滚指南

    周一早上打开站,前台一片白,什么都不显示。后台能进,插件列表里有两个显示更新失败。上周五还好好的,中间没人动过服务器。服务器自己动了,WordPress的自动更新在周末跑了一次。小版本默认自动装,插件默认也自动装,很多人不知道后面这一条。默认配置里,安全更新和插件更新是两码事,前者拦不住后者。面板上

  • WordPress换域名后,一直跳回旧域名的症结多在数据库两处记录

    客户发来一张截图,地址栏还是旧域名,页面内容却是新的。域名换完,后台还能进,前台一点导航就跳回旧域名,有时候登录之后被弹回去,看着像账号权限出了问题,跑去翻用户角色,翻半天也翻不出原因,方向一开始就偏了。根源多半不在主题,也不在服务器配置,而在数据库里存着的那两个地址。但先确认一件事,wp-conf

  • WordPress选项表为何容易膨胀?6.6后autoload新增三种值,开发者需留意

    WordPress把站点标题、插件开关、主题设置都放在wp_options这张表里。带autoload标记的行会在每次请求开头被一次性读出来,装进内存。行数少、体积小的时候这一步几乎不花钱。等行数和体积都上去,每个请求都要多背一份。WordPress6.6改了这套机制,autoload这一列原先只有

    标签:
    wordpress
  • WordPress换完固定链接,文章页全变404,缺的是Nginx重写规则

    后台把固定链接从“朴素”改成“文章名”,保存之后首页还能打开,点进任何一篇文章都是404,改回朴素又全部正常。多数人的第一反应是去看.htaccess,文件在,规则也在,内容一个字没写错。问题在于nginx根本不读这个文件,它只认配置文件里的location和rewrite,根目录那个.htacce

    标签:
    wordpress
  • WordPress后台越用越慢,多半是wp_options里自动加载的项太多

    站点跑了两三年,后台文章列表要转好几秒,前台首屏也越来越钝,可服务器负载不高、内存也没吃满。这种慢但不忙的状态,值得先去数据库里翻一眼wp_options表:它存的是一条条键值对,其中标记为自动加载的那些,每次页面请求都会被一次性读进内存,项数一多,等于每个访客都在替你背这批数据。用一条排序语句把自

热门排行

信息推荐