跳转到内容
TubePress — 免费、自托管 & 持续维护
开发者参考

Cron 与 CLI 脚本

伪 cron 调度器,以及面向高级主机的可选命令行脚本。

TubePress 无需配置系统 crontab 即可完成所有定期任务——包括重新计算排名、轮询转码作业、导入 Feed、刷新站点地图等。本页介绍伪 cron、维持其运行的心跳机制,以及面向高级主机的可选命令行脚本。

伪 cron

CronManager 是一个 WordPress 风格的调度器。任务以名称和时间间隔注册,每次页面渲染结束时调用一次 CronManager::run()。每个任务仅在距上次运行已过足够时间后才会执行。

// Register a task (typically from a plugin's boot() method)
CronManager::register('promo_refresh', 600, function () {
    Promo::rebuildCache();   // runs at most every 10 minutes
});

它被设计为在任何主机上都能安全运行:

  • 原子锁定。 通过对 settings 表的条件 UPDATE 声明每次运行,确保两个并发请求永远不会重复执行同一任务。
  • 持久化时间戳。 最后运行时间存储在 settings 中(autoload = 0),因此调度在重启和崩溃后依然有效——下次页面加载时直接从上次停止的位置继续。
  • 自动退避。 持续抛出异常的任务将以指数增长的间隔重试(上限为一小时),直到恢复正常,成功后失败计数器重置。

心跳机制——无需 crontab

伪 cron 只在页面渲染时触发,这对于全新站点或低流量站点来说是个问题。TubePress 通过自管理心跳机制解决了这一问题:一个轻量级 CLI 进程(bin/heartbeat.php)大约每 50 秒 ping 一次首页,使调度器即使在零访客的情况下也能持续运转。

  • 它受 PID 保护,若意外终止,任何 Web 请求都会自动重启它——无需手动启动或监控。
  • 在运行时通过将 heartbeat_enabled 设置为 0 来关闭它。
这就是 TubePress 能在共享主机上运行的原因。 有了伪 cron 和心跳机制,定期任务自动执行——无需 crontab -e,无需 supervisor,无需维护额外的服务。

调度器上运行的任务

核心及内置插件会注册各自的任务——例如 CTR 分数重新计算、转码作业分派与重试、Feed 导入、目录处理、AI 翻译作业和站点地图刷新。当您启用各子系统时,它们会自动添加各自的任务,无需任何手动配置。

可选 CLI 脚本

对于繁重或一次性操作,bin/ 目录中附带了一些命令行脚本,可以在支持的主机上手动运行或通过真实 crontab 运行。这些脚本包括长时运行的工作进程(用于目录下载和批量删除)以及维护辅助工具。从项目根目录使用系统 PHP CLI 运行它们:

php bin/heartbeat.php        # run the heartbeat in the foreground
php bin/catalogue-worker.php # process catalogue download jobs
CLI PHP 版本须与 Web PHP 版本匹配。 请使用与您的站点相同的 PHP 版本(8.2 或更新版本)运行 CLI 脚本。版本守卫会拒绝在旧版本上启动。

使用真实 crontab(高级)

如果您希望由操作系统驱动调度器——例如在高流量站点上需要精确、可预测的时间控制——可以禁用心跳机制,并添加一个系统 cron 条目,以短间隔请求首页(或运行一次心跳)。大多数运营者无需这样做;内置心跳已足够。

后续步骤

还有疑问?

从您的控制面板提交工单,我们的团队将为您提供帮助。

体验在线演示 → 下载 TubePress →