【Linux】cron计划任务定时执行命令

发布于:2025-02-16 ⋅ 阅读:(31) ⋅ 点赞:(0)

在Linux系统中,crontab 是一种用于设置周期性执行任务的工具,通过编辑 crontab 文件,用户可以指定在特定时间自动运行命令或脚本。以下是关于 crontab 的详细介绍:


1. crontab 基本结构

每个 crontab 任务由一行配置组成,格式为:

* * * * * command-to-execute

五个时间字段依次表示:

  1. 分钟(0-59)
  2. 小时(0-23)
  3. 日期(1-31)
  4. 月份(1-12)
  5. 星期(0-7,0和7均表示周日)

示例:

  • 0 3 * * * /backup.sh → 每天凌晨3点执行备份脚本。
  • */15 * * * * ping example.com → 每15分钟执行一次ping命令。

2. 时间字段符号

  • *:匹配任意值。
  • ,:分隔多个值(如 1,3,5)。
  • -:定义范围(如 10-20)。
  • /:指定间隔(如 */5 表示每5单位)。

3. 常用命令

  • 编辑任务crontab -e
  • 列出任务crontab -l
  • 删除所有任务crontab -r
  • 指定用户(需权限):crontab -u username -e

4. 用户级 vs 系统级任务

  • 用户级:通过 crontab -e 编辑,任务保存在 /var/spool/cron/ 下,以用户名命名。
  • 系统级:直接编辑 /etc/crontab/etc/cron.d/ 下的文件,需指定执行用户:
    * * * * * username /path/to/command
    

5. 环境变量问题

Cron 默认使用简化的环境变量,可能导致脚本执行失败。解决方法:

  • 在命令中使用绝对路径。
  • crontab 文件顶部设置环境变量(如 PATH, SHELL)。

6. 错误处理与日志

  • 输出重定向:避免邮件通知堆积:
    * * * * * /script.sh > /dev/null 2>&1  # 丢弃输出
    * * * * * /script.sh >> /var/log/script.log 2>&1  # 记录到文件
    
  • 查看日志
    grep CRON /var/log/syslog  # Ubuntu/Debian
    grep cron /var/log/cron    # CentOS/RHEL
    

7. 特殊字符串

快捷时间表达式(部分系统支持):

  • @reboot:系统启动时执行。
  • @daily@midnight:每天0点执行。
  • @weekly:每周日0点执行。
  • @monthly:每月1日0点执行。

8. 注意事项

  • 时区:Cron 使用系统时区,可通过 TZ 变量调整:
    CRON_TZ=Asia/Shanghai
    0 8 * * * /task.sh  # 在亚洲/上海时区的8点执行
    
  • 权限控制:通过 /etc/cron.allow/etc/cron.deny 限制用户。
  • 秒级任务:Cron 不支持秒级,需结合 sleep 或改用 systemd timer

9. 示例场景

  • 每天备份数据库
    0 2 * * * /usr/bin/mysqldump -u root dbname > /backup/db.sql
    
  • 每周清理临时文件
    0 4 * * 1 /bin/rm -rf /tmp/*
    
  • 每10分钟检查服务状态
    */10 * * * * /usr/bin/systemctl check-service nginx
    

通过灵活配置 crontab,可以实现自动化运维任务,如备份、监控、清理等。建议结合日志记录和环境变量设置,确保任务稳定运行。