温馨提示×

如何迁移cron到debian定时器

小樊
40
2026-10-25 09:37:33
栏目: 智能运维

把 cron 作业迁移到 Debian 的 systemd timer(定时器),本质上就是用 .service + .timer 两个 unit 文件,替代原来的 crontab 条目。下面按步骤说明。


一、理解对应关系

cron systemd timer
crontab -e 中的一行 一个 .timer + 一个 .service
执行时间表达式 OnCalendar=
执行命令 ExecStart=
日志 journalctl
用户级任务 --user 定时器

二、示例:cron 任务

假设原有 cron:

0 2 * * * /usr/local/bin/backup.sh

表示 每天 02:00 执行 backup.sh


三、创建 systemd service

1. 创建 service 文件

系统级(推荐):

sudo nano /etc/systemd/system/backup.service

内容:

[Unit]
Description=Backup script

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

如果是用户级:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/backup.service

四、创建 systemd timer

2. 创建 timer 文件

sudo nano /etc/systemd/system/backup.timer

内容:

[Unit]
Description=Run backup daily at 2am

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

说明:

  • OnCalendar 替代 cron 时间
  • Persistent=true:如果系统关机错过时间,开机后补跑
  • Unit= 指定要跑的 service

五、启用并启动

sudo systemctl daemon-reexec
sudo systemctl enable --now backup.timer

查看状态:

systemctl list-timers
systemctl status backup.timer

六、日志查看(替代 mail / 输出)

journalctl -u backup.service
journalctl -u backup.timer

七、常见 cron → OnCalendar 对应表

cron OnCalendar
0 2 * * * *-*-* 02:00:00
*/5 * * * * *:0/5
0 0 * * 1 Mon *-*-* 00:00:00
30 9 1 * * *-*-01 09:30:00

八、用户级 timer(不需要 root)

systemctl --user enable --now backup.timer

注意:

  • 需 loginctl enable-linger 用户名
  • 否则用户退出后 timer 不运行

九、迁移建议

✅ 适合迁移:

  • 长期运行任务
  • 需要日志、失败重试、依赖控制

❌ 不太适合:

  • 极简单临时任务
  • 多用户共享 cron

如果你愿意,可以把 你的 crontab 内容贴出来,我可以直接帮你生成对应的 systemd 文件。

0 踩