温馨提示×

centos定时器使用教程

小樊
46
2026-01-08 04:35:54
栏目: 智能运维

CentOS 定时器使用教程

一 概览与选择

  • CentOS 上做定时任务,常用方案有两类:
    1. cron/crond:系统自带、上手最快,适合绝大多数周期任务;
    2. systemd Timer:与 systemd 深度集成,适合需要精确依赖、日志与并发控制的场景。
  • 快速对比:
    维度 cron/crond systemd Timer
    配置入口 crontab -e/etc/crontab/etc/cron.d/ .timer.service 单元文件
    最小粒度 1 分钟 可精确到秒级(OnCalendar/AccuracySec)
    日志与监控 查看 /var/log/cron 使用 journalctl -u xxx.timer/.service
    适用场景 常规备份、清理、拉取脚本 需依赖顺序、失败重试、复杂日历规则
  • 建议:日常任务优先用 cron;若需更强的系统级编排与日志联动,再选 systemd Timer

二 使用 cron 快速上手

    1. 安装与启动
    • 检查/安装:
      • CentOS 7:rpm -q crontabs || yum install -y crontabs
      • CentOS 8/9:rpm -q cronie || dnf install -y cronie
    • 启动与开机自启:
      • systemctl start crond
      • systemctl enable crond
      • systemctl status crond(应显示 active (running)
    1. 基本命令
    • crontab -e 编辑当前用户的计划任务
    • crontab -l 列出当前用户的任务
    • crontab -r 删除当前用户的全部任务(谨慎)
    • crontab -u <用户> -e 编辑指定用户的任务(需管理员)
    1. 时间格式与常用写法
    • 格式:分 时 日 月 周 命令(五个时间字段 + 命令)
    • 取值范围:分钟 0–59、小时 0–23、日 1–31、月 1–12、周 0–7(0 和 7 均为周日)
    • 特殊字符:
      • * 任意值;, 列表;- 范围;/ 步长(如 */10 每 10 单位)
      • 简写:@reboot(开机运行)、@daily@hourly
    1. 实用示例
    • 每天 03:15 执行脚本并记录日志:
      • 15 3 * * * /bin/bash /home/user/myscript.sh >> /var/log/myscript.log 2>&1
    • 5 分钟 同步时间:
      • */5 * * * * /usr/sbin/ntpdate -s time.example.com >> /var/log/ntp.log 2>&1
    • 每周一 09:00 清理临时目录:
      • 0 9 * * 1 /bin/rm -rf /tmp/old_* 2>/dev/null
    1. 系统级任务与目录
    • 系统级配置:/etc/crontab/etc/cron.d/(文件内可指定运行用户)
    • 周期目录:/etc/cron.hourly//etc/cron.daily//etc/cron.weekly//etc/cron.monthly/(放入可执行脚本由 run-parts 执行)
    1. 日志与排错
    • 查看任务执行记录:tail -f /var/log/cron
    • 常见问题:命令与脚本使用绝对路径、设置 PATH、脚本具备可执行权限、必要时在 crontab 顶部定义环境变量。

三 使用 systemd Timer 精确调度

    1. 基本思路
    • .service 单元定义“要执行的命令/脚本”,用 .timer 单元定义“何时触发”。
    1. 示例:每天 02:00 执行备份脚本
    • 创建服务单元 /etc/systemd/system/backup.service
      [Unit]
      Description=Daily Backup Task
      
      [Service]
      Type=oneshot
      ExecStart=/usr/bin/bash /opt/scripts/backup.sh
      
    • 创建定时器单元 /etc/systemd/system/backup.timer
      [Unit]
      Description=Run backup daily at 02:00
      Requires=backup.service
      
      [Timer]
      OnCalendar=*-*-* 02:00:00
      Persistent=true
      
      [Install]
      WantedBy=timers.target
      
    • 启用与启动:
      • systemctl daemon-reload
      • systemctl enable --now backup.timer
    1. 常用命令
    • 查看所有定时器:systemctl list-timers --all
    • 查看状态:systemctl status backup.timer
    • 停止/禁用:systemctl stop|disable backup.timer
    1. 适用场景与优势
    • 精确日历规则(OnCalendar)、开机补偿(Persistent)、日志统一(journalctl)、依赖与并发控制(Unit 关系)。

四 常见问题与最佳实践

    1. 最小粒度为1 分钟
    • 若需“每 30 秒”,可用同分钟内的多个条目配合 sleep
      • * * * * * /usr/bin/your_cmd
      • * * * * * sleep 30 && /usr/bin/your_cmd
    1. 环境变量与路径
    • cron 环境与交互式 shell 不同,务必使用绝对路径;必要时在 crontab 顶部设置 PATH,或在脚本中显式定义。
    1. 权限与日志
    • 脚本与日志目录权限要匹配执行用户;建议统一将输出重定向到日志文件(如 >> /var/log/xxx.log 2>&1),便于排查。
    1. 系统级与用户级分离
    • 系统维护类任务用 /etc/crontab/etc/cron.d/(可指定运行用户);个人任务用 crontab -e
    1. 离线/宕机补偿
    • 桌面或可能离线的场景可结合 anacron;服务器环境建议保持 crond 持续运行并监控 /var/log/cron
    1. 快速验证
    • 先用临近时间测试(如“每分钟/每 5 分钟”),确认无误再改为正式时间;随时用 tail -f /var/log/cronjournalctl -u xxx.timer/.service 观察执行与报错。

0