WP-Cron 与服务器定时任务的区别

21 人参与

很多人第一次意识到 WP-Cron 的存在,是因为网站出了怪事:明明设好了早上八点定时发布的文章,到中午还躺在草稿箱里;或者备份功能好几天没动静。查来查去,锅往往就在这个名字里带 Cron 的东西上。

名字虽然像,WP-Cron 其实不算真正的定时任务。它更像一个看门大爷手里的记事本——没人上门的时候,大爷是不会主动翻本子的。WP-Cron 的触发完全依赖访问:有人打开页面,WordPress 才顺手检查一下有没有到点的任务要跑。这就带来两个很现实的坑。小站流量少,半天没人访问,定时发布、定时备份全都跟着迟到;大站流量大,每次访问都要多做一次检查,白白增加负担。

服务器定时任务则是另一套逻辑,更像闹钟。它由服务器系统自己管,到点就跑,跟有没有人访问网站毫无关系。凌晨三点没人看站,任务照样准时执行;访问高峰来了,它也不会给页面加载添乱。

所以不少维护建议里都会提到一个常见做法:把 WP-Cron 的自动触发关掉,改由服务器定时任务定期去触发。这样时间点可控,执行也稳定。但这里有个最容易踩的坑——只做了前一步,忘了后一步。WP-Cron 一关,服务器那边又没接上,所有计划任务就彻底停摆了,而且停得悄无声息,往往要等定时发布再次跳票才被发现。

切换之后也别急着收工,最好隔几天回头看一眼,确认计划任务真的在按预期执行。毕竟这类问题平时不痛不痒,一旦出事就是发布延误、备份中断这种实打实的损失。对咱们普通站长来说,搞懂这两者的区别,核心就一句话:WP-Cron 靠人气,服务器定时任务靠闹钟,想要准时,还是得选那个不靠运气的。

参与讨论

21 条评论
  • value29

    小站流量少,WP-Cron 确实容易掉链子

    回复
  • 可乐仙

    服务器定时任务更稳,建议关掉 WP-Cron

    回复
  • 翡翠之泪

    只关不接,任务直接停摆,这坑我踩过

    回复
  • 狰兽裂石

    以前以为有访问就能触发,结果漏了好多备份

    回复
  • 精卫石

    凌晨三点没人访问也能跑,这点很关键

    回复
  • 幽暗孤心

    切换配置后最好定期检查,别等出事了才发现

    回复
  • Soulflame

    靠人气还是靠闹钟,这个比喻太形象了

    回复
  • 影子社交员

    普通站长搞懂这个区别,能省不少运维麻烦

    回复
  • 龙吟四海

    定时发布迟到真的会急死人,得赶紧改

    回复
  • 老式挂钟

    有没有具体的 crontab 写法推荐?

    回复
  • 白袍剑客

    看来以后得把这两者彻底分清楚再动手

    回复
  • 可卿幽梦

    关掉WP-Cron后千万记得设crontab,别问我怎么知道的。

    回复
    1. 千绘

      @ 可卿幽梦 深有体会,忘记设crontab直接停摆几天才发现😂

      回复
  • 鬼泣声

    @龙虾 备份静悄悄没跑才是真要命,发现的时候心都凉了

    回复
    1. 爪 爪

      @ 鬼泣声 这情况最坑,WP-Cron 关了服务器定时任务没接上的话,计划任务就悄悄停摆。隔几天回头看一眼执行日志,别等再跳票才发现。

      回复
  • 梦野星

    流量低时真的会卡发布吗?

    回复
    1. 枫少@KillBoy (作者)

      @ 梦野星 会卡。WP-Cron 靠访问触发,没流量就不跑任务,发布自然延迟。建议关 WP-Cron 改用服务器定时任务。

      回复
  • 漠辰

    有没有办法监控WP-Cron是否被触发?

    回复
    1. 枫少@KillBoy (作者)

      @ 漠辰 可以看日志,或者用Query Monitor这类插件实时监控触发情况。

      回复
  • 果汁小熊

    看门大爷这个比喻太形象了,一下就懂了

    回复
    1. 枫少@KillBoy (作者)

      @ 果汁小熊 哈哈这个比喻我自己也挺喜欢,大爷不翻本子,任务就一直躺着😄

      回复