ubuntu定时器启动方式
小樊
42
2025-12-06 09:39:33
Ubuntu 定时器启动方式
一、常用方式与适用场景
- cron:最常用、轻量,适合固定周期的命令或脚本(如每天、每小时)。通过 crontab -e 管理任务,系统自带或可通过 sudo apt-get install cron 安装,常用命令有 crontab -l/-r。
- systemd timers:与 systemd 深度集成,适合需要与系统服务、日志、依赖、开机启动等联动的场景,支持按日历/间隔触发,文件位于 /etc/systemd/system/。
- at:一次性定时任务,适合临时在指定时间运行一次命令或脚本。
- 事件触发:基于文件系统或网络事件的自动化(如 inotifywait 监视目录变化触发脚本),适合“当文件变动时执行”。
二、快速上手示例
- cron
- 编辑任务:crontab -e;查看:crontab -l。
- 示例(每天 06:00 执行脚本):0 6 * * * /path/to/backup.sh。
- 确保脚本可执行:chmod +x /path/to/backup.sh;必要时在 crontab 顶部设置 PATH。
- systemd timers
- 服务单元 /etc/systemd/system/my_script.service:
- [Unit] Description=My script service
- [Service] Type=simple; ExecStart=/path/to/script.sh; User=root; Group=root
- 定时器单元 /etc/systemd/system/my_script.timer:
- [Unit] Description=Run my script every hour
- [Timer] OnBootSec=1min; OnUnitActiveSec=1h; Unit=my_script.service
- [Install] WantedBy=timers.target
- 启用并启动:sudo systemctl enable --now my_script.timer;查看:systemctl list-timers;日志:journalctl -u my_script.service。
- at
- 安装:sudo apt-get install at;一次性在 22:04 执行:echo “cmd” | at 22:04;查看队列:atq;删除:atrm 。
- 事件触发(inotifywait)
- 安装:sudo apt-get install inotify-tools;监视目录并触发脚本:
- inotifywait -m /path/to/watch -e modify,create,delete | while read path action file; do /path/to/script.sh; done
三、如何选择
- 固定周期、简单任务优先用 cron(上手快、维护成本低)。
- 需要与 systemd 生态联动(依赖、日志、开机自启、精确日历/间隔)优先用 systemd timers。
- 只执行一次的临时任务用 at。
- 需要“文件/网络事件驱动”的自动化用 inotifywait 等事件触发方案。
四、常见问题与排查
- 权限与环境
- 脚本需可执行:chmod +x;cron 环境不同于登录环境,建议在 crontab 顶部显式设置 PATH,脚本内使用绝对路径。
- 服务未运行
- cron:sudo service cron start 或 sudo systemctl start cron;
- systemd timer:sudo systemctl enable --now your.timer;查看状态:systemctl status your.timer;列出所有定时器:systemctl list-timers。
- 日志与调试
- cron 日志:编辑 /etc/rsyslog.d/50-default.conf,取消注释 cron. /var/log/cron.log*,重启 rsyslog:sudo service rsyslog restart,查看:tail -f /var/log/cron.log;
- systemd:查看服务日志:journalctl -u your.service,查看定时器日志:journalctl -u your.timer。