一、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