后台「计划任务」页里能看到每个任务的频率、下次运行时间和最近结果,但很多人不知道:这些时间只是展示,真正让任务跑起来的是服务器上每分钟执行一次的 cron:run。这篇把它到底做了什么、什么时候不生效讲清楚。

KingCMS X1 后台页面示例
计划任务在后台「系统设置 → 计划任务」,真正执行靠命令行调度器。

一、前提:每分钟的 cron:run

计划任务不会由网页按时间自动触发。服务器需要每分钟执行一次:

* * * * * /usr/bin/php /var/www/kingcms/x1/bin/kingcms cron:run >> /var/www/kingcms/x1/data/cron.log 2>&1

crontab、systemd timer、宝塔「计划任务」、虚拟主机面板或 Windows 任务计划程序都可以,周期选 1 分钟。同一次 cron:run 会依次执行:已启用模块登记的定时任务、自动备份、数据库整理、检查升级、语言包补翻、演示沙箱清理、后台任务队列,以及到期的自定义任务。data/cron.lock 保证同一时间只跑一个,上一次没结束时本次直接退出。

没有配置 cron:run 时,页面仍显示频率和下次运行时间,但到点不会执行;调度器超过 10 分钟没运行,「数据备份」页顶部会出现黄色警告条。执行用户还必须对 data/ 有写权限,否则锁文件、日志和备份都创建不了。

二、系统任务

系统任务是内核和已启用模块登记的固定任务,不能新建、编辑、删除,只能点「立即运行」:

  • 模块定时任务:每分钟,名称显示模块名;
  • 自动备份:每天 03:15(可改每周一或关闭);
  • 数据库整理:每周日 03:45 执行 VACUUM(可改时间或关闭);
  • 检查升级:每 6 小时,只检查不自动升级;
  • 语言包补翻:每分钟,配置 AI 服务后补翻缺失语言项;
  • 演示沙箱清理、后台任务队列:每分钟。

设置里关闭的任务会显示「已关闭」,下次运行时间显示「—」。点「立即运行」会在当前请求里马上执行一次,不改变原定频率;带到期判断的任务如果本周期已经执行过,会直接返回。

KingCMS X1 AI 助手示例
自定义任务把提示词交给 AI 助手执行,适合定期写草稿或整理内容。

三、自定义任务:让 AI 定期干活

自定义任务按固定时间把一段提示词交给 AI 助手执行,适合定期写文章草稿、整理内容。前提是先在「设置 → AI与API → AI 服务」配好服务并确认可用。

新建时填四项:任务名称(最多 100 字符)、要 AI 做什么(完整指令,写清主题、格式和保存位置)、频率(每天或每周)、运行时间(站点时区,默认 09:00)。保存后可以编辑、暂停、恢复、删除或立即运行。

运行规则要注意:任务以创建人身份执行,跑完会自动确认本次生成的待确认操作,改动直接写入网站;创建人必须仍是启用状态的管理员,否则任务失败;每次只保留一条结果摘要(助手回复前 120 个字符),下次运行覆盖;频率只有每天和每周,不能设每小时。

四、不能当 Shell 用

计划任务页只列固定系统任务和 AI 自定义任务,不能在这里新建 Shell 命令或脚本任务。需要在服务器上定时跑其他命令时,直接写系统 crontab、宝塔面板或其他调度器,不要交给 cron:run。

五、排查顺序

  1. 看服务器是否每分钟执行了 cron:run;
  2. 看执行用户对 data/ 是否有写权限;
  3. 看「数据备份」页的「上次运行」是否更新;
  4. 自定义任务失败时看「最近一次运行结果」:未配置 AI 服务、创建人被停用都会写在这里;
  5. 仍不放心就手动执行 php x1/bin/kingcms cron:run,看终端输出。

小结

计划任务的核心不是后台页面,而是服务器上那条每分钟的 cron:run。把它配好、给足 data/ 权限,再区分系统任务和自定义任务,定时备份、翻译、推送和写稿才会按预期发生。