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

一、前提:每分钟的 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 服务后补翻缺失语言项;
- 演示沙箱清理、后台任务队列:每分钟。
设置里关闭的任务会显示「已关闭」,下次运行时间显示「—」。点「立即运行」会在当前请求里马上执行一次,不改变原定频率;带到期判断的任务如果本周期已经执行过,会直接返回。

三、自定义任务:让 AI 定期干活
自定义任务按固定时间把一段提示词交给 AI 助手执行,适合定期写文章草稿、整理内容。前提是先在「设置 → AI与API → AI 服务」配好服务并确认可用。
新建时填四项:任务名称(最多 100 字符)、要 AI 做什么(完整指令,写清主题、格式和保存位置)、频率(每天或每周)、运行时间(站点时区,默认 09:00)。保存后可以编辑、暂停、恢复、删除或立即运行。
运行规则要注意:任务以创建人身份执行,跑完会自动确认本次生成的待确认操作,改动直接写入网站;创建人必须仍是启用状态的管理员,否则任务失败;每次只保留一条结果摘要(助手回复前 120 个字符),下次运行覆盖;频率只有每天和每周,不能设每小时。
四、不能当 Shell 用
计划任务页只列固定系统任务和 AI 自定义任务,不能在这里新建 Shell 命令或脚本任务。需要在服务器上定时跑其他命令时,直接写系统 crontab、宝塔面板或其他调度器,不要交给 cron:run。
五、排查顺序
- 看服务器是否每分钟执行了
cron:run; - 看执行用户对
data/是否有写权限; - 看「数据备份」页的「上次运行」是否更新;
- 自定义任务失败时看「最近一次运行结果」:未配置 AI 服务、创建人被停用都会写在这里;
- 仍不放心就手动执行
php x1/bin/kingcms cron:run,看终端输出。
小结
计划任务的核心不是后台页面,而是服务器上那条每分钟的 cron:run。把它配好、给足 data/ 权限,再区分系统任务和自定义任务,定时备份、翻译、推送和写稿才会按预期发生。