温馨提示×

ubuntu定时器能否自定义

小樊
42
2025-12-10 08:44:48
栏目: 智能运维

Ubuntu 定时器自定义指南

可以自定义,常见做法有两类:一是使用传统的 cron,二是使用 systemd timer。cron 上手快、语法简洁;systemd timer 与 systemd 服务深度集成,支持日历时间、单调时钟、随机延迟、精度控制等高级能力,适合复杂或需要精细控制的场景。

方案一 使用 cron 自定义

  • 编辑当前用户的定时任务
    • 命令:crontab -e
    • root 用户:sudo crontab -e
  • 基本格式
    • 五个时间字段 + 命令:分 时 日 月 周 command
    • 取值范围:分钟 0–59、小时 0–23、日期 1–31、月份 1–12、星期 0–7(0 和 7 均为周日)
  • 常用示例
    • 10 分钟执行:*/10 * * * * /usr/local/bin/your.sh
    • 每天 08:00 执行:0 8 * * * /home/user/backup.sh
    • 工作日(周一至周五)09:30 执行:30 9 * * 1-5 /home/user/work.sh
  • 管理命令
    • 查看任务:crontab -l
    • 系统级目录:/etc/cron.d//etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly
    • 日志排查:编辑 /etc/rsyslog.d/50-default.conf,取消包含 cron 的行并重启 rsyslog,随后查看 /var/log/cron.log
  • 注意
    • 脚本需具备可执行权限,建议使用绝对路径;涉及特权操作时,用 sudo crontab -e 以 root 身份配置,或在脚本内按需提权。

方案二 使用 systemd timer 自定义

  • 基本思路
    • 创建 .service 定义要执行的任务,创建同名的 .timer 定义何时触发,然后启用并启动定时器。
  • 最小可用示例(每天 08:00 运行备份脚本)
    • 创建服务:/etc/systemd/system/backup.service
      [Unit]
      Description=Backup Service
      
      [Service]
      Type=oneshot
      ExecStart=/home/user/backup.sh
      User=root
      
    • 创建定时器:/etc/systemd/system/backup.timer
      [Unit]
      Description=Run backup.service daily at 8am
      
      [Timer]
      OnCalendar=*-*-* 08:00:00
      Persistent=true
      
      [Install]
      WantedBy=timers.target
      
    • 启用与启动
      sudo systemctl daemon-reload
      sudo systemctl enable --now backup.timer
      
    • 查看状态与下次触发时间
      systemctl list-timers --all
      systemctl status backup.timer
      journalctl -u backup.timer -f
      
  • 高级能力
    • 单调时钟(相对时间)
      • 例如:开机后 10 分钟运行一次,之后每隔 1 小时再运行
        [Timer]
        OnBootSec=10min
        OnUnitActiveSec=1h
        
    • 随机延迟(避免多机同时触发)
      • 例如:每天触发,但在计划时间后最多随机延迟 10 分钟
        [Timer]
        OnCalendar=daily
        RandomizedDelaySec=600
        Persistent=true
        
    • 精度控制
      • 例如:将精度放宽到 1 分钟
        [Timer]
        AccuracySec=1m
        
  • 适用场景
    • 需要随机延迟高精度/单调时钟、与 systemd 服务联动、或集中管理定时器单元时优先选择。

如何选择

维度 cron systemd timer
语法与易用性 基于时间表的 5 字段语法,简单直观 基于 OnCalendar/OnBootSec/OnUnitActiveSec 等指令,更灵活
触发模型 按日历时间触发 日历时间 + 单调时钟(相对时间)
高级能力 基础功能为主 支持 随机延迟精度控制、依赖管理、日志与状态集成
适用场景 日常、固定时间点的任务 复杂调度、分布式去峰、需要与 systemd 深度集成的任务

0