Appaloft Docsv878ea0ca9d2b5227200e9c2fa399a24afef99f67
Projects And Resources

Scheduled tasks

管理 Resource 拥有的定时任务、手动运行、运行历史和任务日志。

Scheduled task 是 Resource 拥有的重复任务定义,用来运行迁移、同步、cache warm、维护脚本或其他 不会替换线上服务进程的命令。任务定义保存 schedule、timezone、command、timeout、retry、 enabled/disabled 状态和并发策略,但不会创建 Deployment,也不会写入 deployment history。

创建定时任务
appaloft scheduled-task create res_web \
  --schedule "0 2 * * *" \
  --timezone UTC \
  --command "bun run migrate" \
  --timeout-seconds 600 \
  --retry-limit 1

禁用任务会阻止自动调度。删除任务只移除任务定义和后续触发入口,不会删除 Resource、Deployment、 runtime 进程或外部依赖。

在 self-hosted runtime 执行里,scheduled tasks 会跑在 Resource 最新拥有 runtime 的 deployment 上; 前提是该 deployment 使用受支持的 Docker runtime target:local-shell Docker、generic-SSH Docker、 Docker Compose 或 Docker Swarm image service。Appaloft 会在保留的 runtime 上下文里启动临时 task container、Compose run 或 Swarm replicated-job,所以任务命令可以访问相同的内部 runtime network, 同时不替换正在服务的进程。长驻 scheduled task runner 仍然默认关闭,需要在配置里显式启用。

scheduled-tasks.run-now 接受一次 manual run attempt。命令返回 run id 后,实际执行和完成状态通过 run detail、run list 和 run logs 查看。

立即运行一次任务
appaloft scheduled-task run tsk_daily_migration --resource-id res_web

如果 Resource 已归档、任务已禁用、任务不属于给定 Resource,或默认 forbid 并发策略发现已有未结束 run,Appaloft 会在启动任务命令前拒绝或跳过本次 run。

对于部署在 local-shell、generic-SSH 或 Docker Swarm Docker 目标上的 Resource,Appaloft 会在当前 runtime 上下文中运行任务。Docker container 部署会启动一个加入 Resource container network namespace 的一次性任务容器;Docker Compose 部署会针对保留的目标 service 启动一次性 Compose service run;Docker Swarm image-service 部署会在保留的 Swarm 网络上启动带 Appaloft label 的临时 job service。

任务进程还会收到系统拥有的 APPALOFT_* context variables,包括 run id、task id、Resource id 以及拥有 runtime 的 deployment 身份。如果 manual run 传入同名保留变量,Appaloft 会用系统值覆盖它们。

Task runs 是独立于 Deployment 的历史记录。它们记录 manual 或 scheduled trigger、 accepted/running/succeeded/failed/skipped 状态、开始和结束时间、退出码和安全失败摘要。

查看运行历史
appaloft scheduled-task runs list --task-id tsk_daily_migration
appaloft scheduled-task runs show str_daily_migration_1 --task-id tsk_daily_migration

运行失败不会自动 rollback 或 redeploy 正在服务的 Resource。需要修复任务命令、Resource runtime profile、依赖或环境变量后,再手动运行任务或等待下一次 schedule。

Task run logs 只属于对应的 run。它们不会混入 Deployment logs 或 Resource runtime logs。

读取任务日志
appaloft scheduled-task runs logs str_daily_migration_1 --task-id tsk_daily_migration

日志输出必须屏蔽看起来像 secret、token、password 或 connection string 的内容。需要调试时,优先 共享 task id、run id、状态、时间、退出码和已屏蔽日志,不要复制原始 secret 值。