计划任务迁移是做什么的
从 Windows 迁移到信创平台时,原有的计划任务需要重建为 cron 或 systemd timer。迁移分两步:一是把触发规则(时间、周期、重试)翻译过去,二是把任务动作的脚本从批处理改写为 shell(见 bat 转 shell 相关条目),并核对执行账户与权限范围。Linux 侧的定时任务不加载用户登录环境,脚本里必须显式设置 PATH 或写全路径,否则常见「手工能跑、定时失败」。
基本信息
| cron 配置 | 用户级 crontab -e,系统级 /etc/cron.d 与 /etc/crontab |
|---|---|
| 时间格式 | 分 时 日 月 周,后面跟要执行的命令 |
| systemd timer | OnCalendar 定义触发时间,Persistent 补跑错过的任务 |
| 日志 | cron 输出需重定向,timer 可走 journalctl |
| 执行账户 | 按最小权限选择服务账户,不要沿用旧的高权账户 |
典型使用场景
- 每日备份任务从 Windows 计划任务迁移到 cron,保留原有触发时间
- 需要补跑语义的任务(如设备关机错过的备份)改用 systemd timer
- 日志轮转、清理、报表生成等周期性维护任务集中迁移
- 核对任务执行账户与所需文件权限,避免迁移后权限不足失败
- 排查「迁移后任务不执行」:检查 cron 服务状态、脚本权限与环境变量
- 把多个零散任务统一到 timer 便于用 systemctl 与 journalctl 观察
- 迁移后统一调整任务时间,避免所有任务集中触发造成资源争抢
cron 与 timer 示例
cron 与 timer 示例
# Windows:每天 02:30 备份 → cron 对应写法
# 30 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
# 每周一 06:00 执行
# 0 6 * * 1 /opt/scripts/weekly.sh
crontab -l # 查看当前用户任务
systemctl status crond --no-pager | head # 服务名在 deb 系为 cron
# 需要补跑与统一日志时改用 timer:
cat > /etc/systemd/system/backup.timer <<'EOF'
[Unit]
Description=daily backup
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
systemctl enable --now backup.timer
systemctl list-timers | head # 查看下次触发时间迁移对照要点
| Windows 概念 | Linux 对应 | 迁移注意 |
|---|---|---|
| 触发器时间 | cron 五段或 OnCalendar | 注意时区与夏令时设置 |
| 执行账户 | 运行任务的用户或服务账户 | 按最小权限重新评估 |
| 起始位置 | 脚本内 cd 或绝对路径 | cron 默认目录与预期不同 |
| 环境变量 | 脚本内显式设置 | cron 不读登录环境 |
| 重试与补跑 | timer 的 Persistent 或脚本内重试 | 补跑语义需业务可接受 |
「手工执行正常、定时执行失败」几乎都是环境差异导致:cron 的 PATH 很短、不加载 profile、工作目录不确定。脚本里显式写全命令路径、设置 PATH 并固定工作目录可以一次性消除这类问题。
迁移后建议保留一段时间的双跑观察:新任务的输出日志、执行时长与旧系统对照,确认结果一致后再下线旧任务。