温馨提示×

ubuntu定时器配置方法

小樊
35
2025-12-06 09:36:37
栏目: 智能运维

Ubuntu 定时器配置方法

一 概览与选择

  • 常用方案有三类:
    1. cron:最通用的系统级定时任务,适合周期执行脚本与命令。
    2. systemd 定时器:与 systemd 深度集成,适合需要依赖管理、日志与更复杂的触发规则的任务。
    3. at:适合一次性在指定时间执行的任务。
  • 快速对比:
    方案 适用场景 核心命令/文件 优点 局限
    cron 周期性任务 crontab -e,/etc/cron.* 简单、系统自带 环境简单、复杂依赖管理弱
    systemd 定时器 复杂依赖、日志、精确控制 .service + .timer,systemctl 日志与依赖强、可开机触发 配置相对繁琐
    at 一次性任务 at,atq,atrm 使用简单 不支持周期执行
    以上方案均为 Ubuntu 常见做法,可按场景选择或组合使用。

二 使用 cron 配置定时任务

  • 安装与启动(如未安装):sudo apt-get install cron;启动/查看状态:sudo service cron start,service cron status。多数桌面/服务器版本默认已安装并开机自启。
  • 编辑任务:
    • 当前用户:crontab -e;root 用户:sudo crontab -e(编辑 root 的定时任务)。
    • 时间格式:分 时 日 月 周 命令(5 个时间字段 + 命令)。
  • 常用示例:
    • 每天 08:00 执行脚本:0 8 * * * /home/user/backup.sh
    • 5 分钟执行:*/5 * * * * /usr/local/bin/check.sh
    • 每月 1 日 02:30 执行:30 2 1 * * /opt/scripts/monthly.sh
  • 管理与查看:
    • 列出任务:crontab -l;删除全部任务:crontab -r(谨慎使用)。
  • 日志与排错:
    • 默认可能未记录 cron 日志,编辑 /etc/rsyslog.d/50-default.conf,取消注释行:cron.* /var/log/cron.log,然后重启 rsyslog:sudo service rsyslog restart;查看日志:less /var/log/cron.log 或 tail -f /var/log/cron.log
  • 实用提示:
    • 脚本需可执行:chmod +x /path/script.sh;在 crontab 中使用绝对路径;cron 环境与登录环境不同,必要时在 crontab 顶部设置 PATH 等变量。

三 使用 systemd 定时器

  • 适用场景:需要开机触发、精确间隔(如 OnBootSec/OnUnitActiveSec)、依赖顺序、标准输出日志到 journald 等。
  • 步骤:
    1. 创建服务单元(/etc/systemd/system/backup.service):
      [Unit]
      Description=Backup Service
      [Service]
      ExecStart=/home/user/backup.sh
    2. 创建定时器单元(/etc/systemd/system/backup.timer):
      [Unit]
      Description=Run backup.service daily at 08:00
      [Timer]
      OnCalendar=--* 08:00:00
      Persistent=true
      [Install]
      WantedBy=timers.target
    3. 启用并启动:sudo systemctl enable backup.timer;sudo systemctl start backup.timer
    4. 查看状态与下次触发时间:systemctl status backup.timer;systemctl list-timers --all
  • 变体(按固定间隔执行):
    [Timer]
    OnBootSec=1min
    OnUnitActiveSec=1h
    Unit=my_script.service
    上述示例分别演示了“每天固定时刻”和“间隔固定时长”的两种常见用法。

四 一次性任务与常见问题

  • 一次性任务(at):
    • 安装:sudo apt-get install at
    • 使用:at 22:04 2025-12-25(回车后输入命令,Ctrl+D 结束);查看队列:atq;删除任务:atrm
  • 常见问题与排查:
    • 命令不执行:脚本无执行权限(chmod +x);路径使用绝对路径;在 crontab 顶部显式设置 PATH
    • 环境变量缺失:cron 环境精简,必要时在 crontab 中导出所需变量或将变量写入脚本。
    • 日志不可见:按上文开启 /var/log/cron.log 或使用 journalctl -u <timer/service> 查看 systemd 单元日志。
    • 访问控制:系统可能启用 /etc/cron.allow 或 /etc/cron.deny 控制用户能否使用 crontab。
    • 避免并发:在脚本开头使用文件锁(如 flock)防止上一次未结束时重复执行。

0