Ubuntu定时器可以定时执行任务,系统提供了多种工具来实现定时功能,主要包括cron、systemd-timers、at等,覆盖周期性任务、一次性任务等不同场景。
cron是Ubuntu默认的定时任务守护进程,适合设置周期性执行的任务(如每天备份、每小时清理日志)。
crontab -e命令打开当前用户的crontab文件,添加定时规则。规则格式为分钟 小时 日期 月份 星期 命令(例如0 2 * * * /path/to/script.sh表示每天凌晨2点执行脚本)。* * * * *(每分钟)、0 * * * *(每小时第0分钟)、0 0 * * *(每天午夜)、0 0 1 * *(每月1日午夜)。crontab -l查看当前任务,crontab -r删除所有任务(谨慎使用)。systemd-timers是Ubuntu 16.04及以上版本的内置工具,支持更精准的时间控制(如指定秒级触发),且能替代传统cron的部分功能。
.service文件(如/etc/systemd/system/mytask.service),定义任务执行的命令(ExecStart=/path/to/script.sh)。.timer文件(如/etc/systemd/system/mytask.timer),设置触发规则(如OnCalendar=*-*-* 08:00:00表示每天8点触发,Persistent=true表示系统启动后补做错过的任务)。sudo systemctl enable --now mytask.timer启用并启动定时器,sudo systemctl list-timers --all查看所有定时器状态。at命令适合一次性执行的任务(如“10分钟后重启服务”),无需修改配置文件。
sudo apt install at安装;启动服务sudo systemctl enable --now atd。echo "command" | at time提交(例如echo "sudo reboot" | at now + 10 minutes表示10分钟后重启)。atq查看待执行任务,atrm <job_id>删除指定任务。chmod +x /path/to/script.sh)。PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)。0 2 * * * /path/to/script.sh >> /var/log/task.log 2>&1),便于排查问题。