WordPress的定时任务有个缺陷,它不一定会按照定好的计划执行。
因为WordPress的 Cron Job依赖前端访问,而不是直接跟操作系统挂钩,所以当WordPress网站的访问量很低,或者是不公开的WordPress实例,其Cron Job就不能按时执行任务。
不按时执行任务除了会影响既定程序的运行,也会影响WP核心的检查更新,维护任务,安全方面也是很大的风险。
情况1
如果你的站点是公开的,可以在Linux 的CronTab上制定一个较为频繁的任务,定时访问站点,触发WordPress检查CronJob:
wget --delete-after https://www.website.com/wp-cron.php
将这个命令保存到系统级crontab里,建议每30分钟执行,即可。记得替换https://www.website.com/
为你的站点首页地址。
情况2
如果你的网站是私密的外界无法通过域名访问,则可以:
cd /path/to/your/website/rootfolder; wp cron event run --due-now >/dev/null 2>&1
替换/path/to/your/website/rootfolder
为你的站点在本机的路径,即可。同样推荐每半小时执行一次。
情况3
如果你的操作系统是Windows,则可以用Windows 计划任务 制定一个系统级计划任务触发PHP执行任务。
shellscript.vbs
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\path\to\script\script.bat" & Chr(34), 0
Set WinScriptHost = Nothing
script.bat
"C:\wamp\bin\php\php5.4.12\php.exe" -f "C:\wamp\www\website\my_process.php"
然后用计划任务定期执行shellscript.vbs即可。
#cron job