Ubuntu定时器使用技巧汇总
cron是Ubuntu中最核心的定时任务工具,适合周期性任务(如每日备份、每小时监控)。
crontab -e命令打开当前用户的crontab文件,每行定义一个任务,格式为分钟 小时 日 月 星期 命令(如0 1 * * * /path/to/backup.sh表示每天凌晨1点执行备份脚本)。crontab -l查看当前用户的任务列表;crontab -r删除所有任务(谨慎使用)。/home/user/script.sh而非./script.sh);建议在脚本中显式设置环境变量(如PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin),避免cron环境与终端环境差异导致的问题。对于仅需执行一次的任务(如延迟重启、单次数据抓取),可使用at命令。
sudo apt install at,然后通过echo "command" | at time提交任务(如echo "reboot" | at 22:30表示22:30重启;echo "/path/to/script.sh" | at now + 5 minutes表示5分钟后执行脚本)。atq查看待处理任务列表;atrm <job_id>删除指定ID的任务(通过atq获取ID)。systemd定时器是Ubuntu推荐的现代定时方案,支持更灵活的调度(如依赖关系、精确时间控制),且与systemd服务深度集成。
/etc/systemd/system/myscript.service),定义任务内容:[Unit]
Description=My Custom Script
[Service]
ExecStart=/path/to/script.sh
User=root
② 编写定时器文件(如/etc/systemd/system/myscript.timer),设置触发规则:[Unit]
Description=Run script every hour
[Timer]
OnCalendar=*-*-* *:00:00 # 每小时整点
Persistent=true # 系统启动后补做错过的任务
[Install]
WantedBy=timers.target
③ 启用并启动:sudo systemctl enable --now myscript.timer。systemctl list-timers查看所有定时器状态;systemctl status myscript.timer查看特定定时器详情。anacron适用于无法24/7运行的系统(如笔记本电脑、台式机),它会补做错过的周期性任务(如每日备份)。
/etc/anacrontab,添加任务条目:period delay job-identifier command(如1 5 backup-job /path/to/backup.sh表示每日执行,系统启动后延迟5分钟运行)。0 1 * * * /path/to/script.sh >> /var/log/script.log 2>&1,其中>>追加输出,2>&1将错误输出合并到标准输出)。chmod +x /path/to/script.sh);系统级任务需用sudo crontab -e编辑(如全局备份任务)。PATH),建议在脚本开头设置完整路径,或在crontab中添加环境变量(如PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)。