首页/系统与基础设施/自动化运维速查/一次性作业与常驻作业的区别
批量执行与作业50 条

一次性作业与常驻作业的区别

一次性作业有明确终点,关心退出码、幂等与结果归档;常驻作业没有终点,关心启动失败重试、崩溃自愈、日志轮转与平滑重启。判断标准是进程是否需要长期占用资源并持续对外服务。介于两者之间的是由调度器周期性拉起的一次性作业。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​​‌‌​​‌‌​​‌‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌​​‌​‌​‌‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌​‌​​‌‌​‌‌‌‌​‌‌​​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

一次性作业与常驻作业

一次性作业有明确终点,例如批处理、备份、迁移脚本;常驻作业没有终点,例如服务进程、代理、采集器。两者的设计取向相反:一次性作业关心退出码语义、幂等、重跑与结果归档;常驻作业关心启动失败重试、崩溃自愈、日志轮转与平滑重启。判断标准很简单:进程是否需要长期占用资源并持续对外提供服务。介于两者之间的是「被调度器周期性拉起的一次性作业」,它既需要一次性作业的收敛性,也需要常驻作业的可靠性保障。

基本信息

一次性作业有明确退出码,产出物可归档,要求可重复执行
常驻作业交由系统管理(systemd、Windows 服务、容器编排)保证拉起
中间形态由 cron、systemd timer、Kubernetes CronJob 周期拉起的一次性任务
关键差异退出码语义、日志轮转、状态保持、重启策略

典型使用场景

  • 备份、数据迁移、批量处理按一次性作业设计
  • 服务、代理、采集器按常驻作业设计并交给系统管理
  • 周期巡检写成一次性脚本,由调度器按周期拉起
  • 需要进度与断点的长任务,按一次性作业设计并持久化进度
  • 常驻作业需要平滑重启,避免中断在途请求

两种形态的落地方式

两种形态的落地方式
/tmp/batch.sh; echo "exit=$?"            # 一次性作业:用退出码表达结果
systemctl enable --now app.service        # 常驻作业:交给 systemd 管理重启与自启
systemctl status app.service              # 查看是否处于 failed 状态
journalctl -u app.service -n 50           # 常驻作业日志统一走 journal
nohup /opt/app/bin/app &                  # 反例:临时手段,崩溃后无人拉起

两种形态对比

维度一次性作业常驻作业
生命周期从启动到结束持续运行直到被停止
结果表达退出码与产出物健康状态与运行指标
失败处理重跑或补偿自动重启并告警
日志一次性收集归档需要轮转,避免写满磁盘
幂等要求重复执行结果一致重复启动不冲突、端口不占用
把长期运行的服务用后台符号与 nohup 拉起,会失去崩溃自愈、开机自启和统一日志,问题往往在无人值守的时段才暴露。除临时验证外应交给服务管理器。
常驻作业重启时若有在途请求或写操作,可能产生半写状态。平滑重启(先停止接收新请求、等待在途完成再退出)与幂等的启动流程是必要设计。

易错点

  • 用 nohup 与后台符号托管长驻进程,进程退出后无人拉起且没有退出原因记录
  • 把长驻服务写成一次性脚本,缺少开机自启与崩溃重启能力
  • 一次性作业没有退出码约定,上游只能靠翻日志判断成败
  • 常驻作业日志不做轮转,长期运行写满磁盘导致服务异常
  • 重启常驻作业时不处理在途请求,出现写入中断与状态不一致

数据来源与参考

  • systemd 官方文档:service 单元与 Restart 策略
  • Kubernetes 官方文档:CronJob 与 Deployment 的差异
  • Linux 手册页 cron(8) 与 anacron(8)

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/one-off-vs-daemon-job.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​​‌‌​​‌‌​​‌‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌​​‌​‌​‌‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌​‌​‌​​‌‌​‌‌‌‌​‌‌​​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​