Ubuntu设置定时器重复执行的主流方法:cron与systemd
cron是Ubuntu默认的定时任务工具,适合周期性重复执行脚本或命令(如每天备份、每小时清理日志等)。
打开终端,输入以下命令进入编辑模式(首次使用会提示选择文本编辑器,如nano或vim):
crontab -e
若需为其他用户设置任务(需管理员权限),可使用:
sudo crontab -e -u username(替换username为目标用户名)。
在crontab文件中,每一行代表一个定时任务,核心格式为:
分钟 小时 日 月 星期 命令
*表示任意分钟);*表示任意小时);*表示任意日期);*表示任意月份);*表示任意星期);/home/user/backup.sh)。/home/user/backup.sh,添加:0 6 * * * /home/user/backup.sh/home/user/cleanup.sh,添加:0 * * * * /home/user/cleanup.sh*/n表示间隔n分钟,如每5分钟执行/home/user/check.sh,添加:*/5 * * * * /home/user/check.sh/home/user/report.sh,添加:0 3 * * 0 /home/user/report.sh(0代表星期日)。编辑完成后,按Ctrl+X→Y→Enter保存并退出(nano编辑器)。
crontab -l;crontab -r(谨慎使用)。chmod +x /path/to/script.sh添加;PATH),需在crontab中手动设置(如在文件顶部添加PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin);grep CRON /var/log/syslog,或直接在命令后重定向输出到日志文件(如0 6 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1)。systemd是Ubuntu的系统和服务管理器,适合需要更复杂调度(如依赖其他服务、精确控制执行时间)的场景。
服务单元文件定义需执行的任务,创建路径为/etc/systemd/system/(需管理员权限),例如创建my-task.service:
sudo nano /etc/systemd/system/my-task.service
添加以下内容(替换为实际脚本路径):
[Unit]
Description=My Custom Repeat Task
After=network.target # 可选:依赖网络服务(如需联网)
[Service]
Type=simple # 任务类型(simple表示立即执行)
ExecStart=/home/user/my-script.sh # 脚本绝对路径
User=root # 执行用户(根据需求调整)
Group=root # 执行组(根据需求调整)
保存并退出。
定时器单元文件定义任务的执行时间,创建路径为/etc/systemd/system/,例如创建my-task.timer:
sudo nano /etc/systemd/system/my-task.timer
添加以下内容(以“每天凌晨3点执行”为例):
[Unit]
Description=Run My Task Daily at 3 AM
[Timer]
OnCalendar=*-*-* 03:00:00 # 每天3点执行(格式:年-月-日 时:分:秒,*表示任意)
Persistent=true # 若任务错过执行时间,下次启动时补执行
[Install]
WantedBy=timers.target # 关联到timers.target(系统定时器服务)
若需“每5分钟执行一次”,可将OnCalendar改为:
OnCalendar=*:0/5(每5分钟,从0分钟开始)。
sudo systemctl daemon-reloadsudo systemctl enable my-task.timersudo systemctl start my-task.timer。sudo systemctl status my-task.timersudo systemctl list-timers --all(可查看下次执行时间、上次执行时间等信息)。