Linux 定时任务工具 crontab 配置详解

Linux 定时任务工具 crontab 配置详解

一、基础概念与结构

crontab 是 Linux 系统内置的定时任务管理工具,通过预定义时间规则周期性执行命令或脚本。其时间规则由 5 个字段组成,格式为:

[分钟] [小时] [日期] [月份] [星期] [执行命令]

各字段取值范围:

  • 分钟(0-59)
  • 小时(0-23)
  • 日期(1-31)
  • 月份(1-12 或英文缩写)
  • 星期(0-7,0 和 7 均表示周日)

二、操作命令

1. 编辑任务列表

crontab -e  # 编辑当前用户的任务
crontab -u username -e  # 编辑指定用户的任务(需权限)

2. 查看任务列表

crontab -l  # 查看当前用户任务
crontab -u username -l  # 查看指定用户任务

3. 文件存储位置

  • 用户级任务:/var/spool/cron/(RHEL/CentOS)或 /var/spool/cron/crontabs/(Debian/Ubuntu)
  • 系统级任务:/etc/crontab/etc/cron.d/ 目录

三、时间规则语法

特殊符号说明示例说明
*任意值0 * * * *每小时整点执行
,多个时间点0 5,17 * * *每天5点和17点执行
-时间范围0 0-6 * * *每天0-6点整点执行
/n间隔频率*/10 * * * *每10分钟执行

四、典型应用场景

1. 固定时间执行

* * * * * /bin/sh /script.sh         # 每分钟执行一次任务

0 2 * * * /bin/sh /script.sh         # 每天02:00执行一次任务

0 17 * * sun /bin/sh /script.sh      # 每周日 17:00 执行一次任务

*/10 * * * * /bin/sh /script.sh      # 每 10min 执行一次任务

2. 高频任务实现

每30秒执行一次任务的需求,因为crontab最小的是1 min。但是我们可以通过如下方法使用两条任务完成。

# 每30秒执行(通过sleep分段)
* * * * * /bin/sh /script.sh
* * * * * sleep 30; /bin/sh /script.sh  

3. 复合时间条件

# 每周五、周日17点执行任务
0 17 * * 5,7 /bin/sh /script.sh               
   
# 每周五、周日4点、17点执行任务
0 4,17 * * 5,7 /bin/sh /script.sh              
   
# 每年 1 月、5 月、8 月 的 每天 每小时每分钟 执行任务
* * * jan,may,aug *    /bin/sh /script.sh     

4. 条件判断

 # 每月的第一个周日2:00执行任务
 0 2 * * sun  [ $(date +%d) -le 07 ] && /bin/sh /script.sh  
  • 时间规则分解
    • 时间表达式:0 2 * * sun
    • 含义: 每周日(星期天)的凌晨 2:00 触发任务。
  • 条件判断逻辑
    • 命令部分: [ $(date +%d) -le 07 ] && /bin/sh /script.sh
    • $(date +%d): 获取当前日期的「日」字段(例如:03 表示 3 日)。
    • -le 07: 判断日期是否 ≤ 7(即每月前 7 天)。
  • 整体逻辑:
    • 当且仅当触发时间满足以下两个条件时,执行 /script.sh
    • 当前是 每周日的凌晨 2:00
    • 当前日期在 每月的前 7 天 内(例如:3 月 5 日、6 月 1 日等)。
  • 典型应用场景
    • 月度首周任务
    • 例如:每月第一个周日的凌晨执行数据归档(确保任务落在月初)。
    • 跨周期校验
    • 若任务需同时满足周频率和月周期(如每月前 7 天生成周报)。

5. 系统级任务

0 4 * * * root /bin/bash restart_service.sh  # 系统级任务需指定用户

6. 高级技巧

crontab 提供的特殊时间宏(语法糖),用于简化任务的配置

@yearly /bin/bash /scripts.sh  # 每年 1 月 1 日 00:00(午夜)执行一次任务

@yearly 仅精确到“年”,若需其他年度时间点(如每年 6 月 1 日),仍需使用标准表达式 0 0 1 6 *

  • 同类语法糖
宏命令等效表达式说明
@yearly0 0 1 1 *每年 1 月 1 日 00:00 执行
@monthly0 0 1 * *每月 1 日 00:00 执行
@daily0 0 * * *每天 00:00 执行
@hourly0 * * * *每小时整点执行
@reboot无等效表达式系统启动时执行
  • 示例参考
# 用户级任务:每年清理一次临时文件 
@yearly find /tmp -type f -mtime +365 -delete 
 
# 系统级任务:每年生成年度报告(需 root 权限)
@yearly root /opt/reports/generate_annual_report.sh  

五、配置注意事项

1. 环境变量问题

crontab 默认使用简化环境变量,建议脚本中使用绝对路径,或在任务中声明 PATH

2. 日志与调试

  • 任务执行记录:/var/log/cron
  • 输出重定向:0 * * * * /script.sh > /log.txt 2>&1

3. 服务管理

systemctl restart crond  # 修改系统级配置后需重启服务

4. 任务备份与恢复

crontab -l > cron_backup.txt  # 备份
crontab cron_backup.txt       # 恢复

可通过 man crontab 查看完整手册,建议通过实际编写测试任务验证配置有效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值