Administrator
Published on 2026-10-27 / 1 Visits
0

cron 和 systemd timer 的对照模板

#AI

一、crontab 模板(cron)

语法:分 时 日 月 周 命令

周:0=周日,6=周六

示例1:每5分钟执行一次(当前用户)

crontab -e

写入:

*/5 * * * * /bin/bash /home/ubuntu/test.sh >> /home/ubuntu/test.log 2>&1

示例2:每天凌晨2点执行(root,加sudo)

sudo crontab -e
0 2 * * * /usr/bin/rsync -av /data /backup >> /var/log/rsync.log 2>&1

示例3:/etc/cron.d/ 独立任务文件(系统级,必须写用户名)

新建文件 sudo nano /etc/cron.d/mybackup

0 3 * * * root /root/backup.sh

注意:cron.d、/etc/crontab 格式多一个【用户】字段,不要和用户crontab搞混!

示例4:cron.daily 方式

脚本放到 /etc/cron.daily/,加执行权限:

sudo cp myscript.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/myscript.sh

Ubuntu22.04 默认由anacron接管,关机错过会补跑

常用快捷符号

  • */10 每10分钟
  • 0 8-18 * * * 8点到18点,每小时整点
  • 0 2 * * 0 每周日凌晨2点

二、systemd timer 模板(推荐,Persistent=true 支持关机补跑)

两个文件:demo.service + demo.timer,放到 /etc/systemd/system/

demo.service

[Unit]
Description=定时任务测试脚本

[Service]
Type=oneshot
ExecStart=/bin/bash /home/ubuntu/test.sh
StandardOutput=append:/home/ubuntu/test.log
StandardError=append:/home/ubuntu/test.log

demo.timer

[Unit]
Description=每5分钟触发test脚本

[Timer]
# 每5分钟
OnCalendar=*:0/5
# 关机错过,开机自动补跑
Persistent=true
# 随机延迟,防止大量任务同时爆发
RandomizedDelaySec=30

[Install]
WantedBy=timers.target

启用命令

sudo systemctl daemon-reload
sudo systemctl enable --now demo.timer
# 查看所有timer
systemctl list-timers
# 查看日志
journalctl -u demo.service -f

OnCalendar 时间写法示例(非常灵活)

# 每天凌晨2点
OnCalendar=*-*-* 02:00:00

# 每周日凌晨3点
OnCalendar=*-*-* 03:00:00
Persistent=true

# 每月1号凌晨4点
OnCalendar=*-*-01 04:00:00

# 工作日(周一到周五)9点
OnCalendar=Mon-Fri *-*-* 09:00:00

三、at 一次性任务模板

# 今天 22:30 执行脚本
at 22:30
/bin/bash /home/ubuntu/once.sh
<EOT>  # Ctrl+D提交

# 明天下午3点
at tomorrow 15:00
# 2小时之后
at now + 2 hours

atq    # 列出任务
atrm 1 # 删除编号1的任务

四、anacron 示例(/etc/anacrontab)

原生配置格式:周期 延迟 任务ID 命令

# 7天周期,开机延迟10分钟执行,id:backup-weekly
7 10 backup-weekly /root/weekly_backup.sh

anacron 最小单位是天,不能精确到几点几分

五、快速选型建议

  • 简单、服务器常年开机、分钟级定时 → crontab
  • 需要日志、失败重试、资源限制、关机补跑 → systemd timer
  • 笔记本/台式机,只做日/周备份,经常关机 → anacron
  • 只跑一次、临时任务 → at