赞片CMScron不执行
照着这篇做完,你就能找出赞片CMS定时任务(cron)不执行的真正原因,并让它重新跑起来。
赞片CMS的定时任务不是一个后台按钮那么简单,它由三部分组成:后台的任务配置(开关、间隔、任务地址)→ 服务器上的定时触发器(宝塔计划任务或 Linux crontab)→ 任务本身的执行环境(PHP超时、权限、时区、锁文件)。任何一环断了,表现都是"任务不执行"。按下面的顺序一步步排查,不要跳步。
第一步:拿到任务地址,并在浏览器里手动跑一次
这一步要拿到一条可以直接访问的 URL,并确认任务程序本身是活的。
登录赞片CMS后台 → 左侧菜单「系统」→「定时任务」(部分版本叫「计划任务」「任务中心」),找到采集或自动更新的那条任务,页面上会显示任务地址,形如:
https://你的域名/api.php/timming/index.html- 或
https://你的域名/index.php/cms/timming/index
以你后台实际显示的为准,不要照抄本文。把这条地址复制到浏览器新标签页访问一次。
- 返回
ok、success、JSON 数据:任务程序正常,问题在服务器触发器(跳到第三步)。 - 返回 404:伪静态没生效,把地址里的
api.php/index.php形式换成另一种再试。 - 返回 500:PHP 报错了,去
/www/wwwroot/你的站点/runtime/log/下看当天日志。 - 返回"任务未开启""没有可执行任务":回后台把任务状态改成「开启」,设置好执行间隔和开始时间再访问。
注意:URL 里的域名必须和站点绑定的主域名一致。如果站点开了强制 HTTPS,地址必须写
https://,写http://会被 301 跳转,cron 工具默认不跟随跳转,等于没访问。
第二步:确认后台配置里的"开关"和"时间"
这一步检查任务自身有没有被允许执行。
在同一个「定时任务」列表里,逐项确认:状态为「开启」;执行间隔已填(如 60 分钟);「上次执行时间」是否有值。如果「上次执行时间」永远是空的,说明任务从来没被触发过,问题一定在服务器侧。
第三步:在服务器上配置触发器
这一步让服务器每分钟去访问一次第一步拿到的地址。
如果你用宝塔面板:左侧「计划任务」→「添加任务」→ 任务类型选「访问URL」→ URL 填第一步的地址 → 执行周期选「N分钟」填 1 → 保存。保存后点该任务右侧「日志」,看有没有每次执行的记录。
如果你用纯命令行,SSH 登录后执行 crontab -e,加一行:
*/1 * * * * curl -s "https://你的域名/api.php/timming/index.html" >/dev/null 2>&1
注意:宝塔的 URL 任务和系统的 curl 都只发 GET 请求。如果你的任务地址是 POST 的,需要在命令里加
-d "",否则任务收不到参数。
第四步:排查"访问了但没效果"的六种常见原因
- PHP 执行超时。采集量大时任务跑不完就断了。宝塔「软件商店」→ PHP 对应版本「设置」→「配置修改」,把
max_execution_time改成 300,memory_limit改成 512M;同时把后台单次采集条数调小到 20 以内。 - 时区不一致。服务器时间快或慢,任务判断"还没到点"。SSH 执行
date看系统时间,宝塔「面板设置」里点「同步时间」;同时把php.ini的date.timezone改为Asia/Shanghai。 - 任务锁没释放。上一次任务卡死,锁文件还在,后续全部被跳过。到站点目录的
runtime/或data/下找.lock结尾的文件(如timming.lock),删掉再试。 - 目录权限不对。
runtime、cache、data三个目录必须可写。宝塔文件管理里选中这三个目录 → 权限设为755,所有者设为www,勾选「应用到子目录」。 - 采集源已失效。手动访问任务地址时返回超时或空白,说明是资源站挂了,不是 cron 的问题,换采集接口地址即可。
- crontab 服务没启动。SSH 执行
systemctl status crond(CentOS)或systemctl status cron(Ubuntu/Debian),显示inactive就执行systemctl start crond并systemctl enable crond。
第五步:用日志确认已经恢复
任务重新跑起来后,回后台「系统」→「日志管理」或「采集日志」,能看到新生成的时间记录;宝塔「计划任务」→「日志」里也会每分钟出现一条访问记录。两边都有新记录,才算真正修好。
小结
- 先手动访问后台显示的任务地址,区分是"任务程序问题"还是"触发器问题"。
- 服务器侧用宝塔「计划任务 → 访问URL」或
crontab -e加 curl,间隔设 1 分钟。 - 手动能跑、cron 不跑,九成是 URL 协议(http/https)、301 跳转或 crontab 服务没启动。
- 能跑但没结果,依次查 PHP 超时、时区、锁文件、目录权限、采集源。
原文链接:https://www.gj0.com/thread-1097.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。