温馨提示×

ubuntu定时器如何设置重复执行

小樊
43
2025-11-02 08:49:44
栏目: 智能运维

Ubuntu设置定时器重复执行的主流方法:cron与systemd

一、使用cron设置重复定时任务(最常用)

cron是Ubuntu默认的定时任务工具,适合周期性重复执行脚本或命令(如每天备份、每小时清理日志等)。

1. 编辑当前用户的crontab文件

打开终端,输入以下命令进入编辑模式(首次使用会提示选择文本编辑器,如nano或vim):
crontab -e
若需为其他用户设置任务(需管理员权限),可使用:
sudo crontab -e -u username(替换username为目标用户名)。

2. 添加重复执行任务规则

在crontab文件中,每一行代表一个定时任务,核心格式为:
分钟 小时 日 月 星期 命令

  • 时间字段说明(从左到右):
    • 分钟:0-59(*表示任意分钟);
    • 小时:0-23(*表示任意小时);
    • 日:1-31(*表示任意日期);
    • 月:1-12(*表示任意月份);
    • 星期:0-7(0和7均代表星期日,*表示任意星期);
    • 命令:需执行的脚本或命令(需填写绝对路径,如/home/user/backup.sh)。

3. 常见重复执行示例

  • 每天固定时间执行:如每天早上6点执行/home/user/backup.sh,添加:
    0 6 * * * /home/user/backup.sh
  • 每小时执行一次:如每小时的第0分钟执行/home/user/cleanup.sh,添加:
    0 * * * * /home/user/cleanup.sh
  • 每5分钟执行一次:使用*/n表示间隔n分钟,如每5分钟执行/home/user/check.sh,添加:
    */5 * * * * /home/user/check.sh
  • 每周日凌晨3点执行:如每周日3点执行/home/user/report.sh,添加:
    0 3 * * 0 /home/user/report.sh0代表星期日)。

4. 保存与验证

编辑完成后,按Ctrl+XYEnter保存并退出(nano编辑器)。

  • 查看当前用户的crontab任务列表:crontab -l
  • 删除当前用户的所有crontab任务:crontab -r(谨慎使用)。

5. 注意事项

  • 脚本权限:确保执行的脚本具有可执行权限,使用chmod +x /path/to/script.sh添加;
  • 环境变量:cron的环境与用户登录环境不同,若脚本依赖环境变量(如PATH),需在crontab中手动设置(如在文件顶部添加PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin);
  • 日志调试:若任务未执行,可查看cron日志(需提前开启):grep CRON /var/log/syslog,或直接在命令后重定向输出到日志文件(如0 6 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1)。

二、使用systemd设置重复定时任务(更灵活)

systemd是Ubuntu的系统和服务管理器,适合需要更复杂调度(如依赖其他服务、精确控制执行时间)的场景。

1. 创建systemd服务单元文件

服务单元文件定义需执行的任务,创建路径为/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          # 执行组(根据需求调整)

保存并退出。

2. 创建systemd定时器单元文件

定时器单元文件定义任务的执行时间,创建路径为/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分钟开始)。

3. 启用并启动定时器

  • 重新加载systemd配置(使新创建的单元文件生效):
    sudo systemctl daemon-reload
  • 启用定时器(设置开机自启):
    sudo systemctl enable my-task.timer
  • 立即启动定时器(无需等待下次开机):
    sudo systemctl start my-task.timer

4. 检查定时器状态

  • 查看定时器是否运行:
    sudo systemctl status my-task.timer
  • 列出所有活动的定时器:
    sudo systemctl list-timers --all(可查看下次执行时间、上次执行时间等信息)。

0