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

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


1. crontab 基本结构

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

bash 复制代码
* * * * * 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/ 下的文件,需指定执行用户:

    bash 复制代码
    * * * * * username /path/to/command

5. 环境变量问题

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

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

6. 错误处理与日志

  • 输出重定向 :避免邮件通知堆积:

    bash 复制代码
    * * * * * /script.sh > /dev/null 2>&1  # 丢弃输出
    * * * * * /script.sh >> /var/log/script.log 2>&1  # 记录到文件
  • 查看日志

    bash 复制代码
    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 变量调整:

    bash 复制代码
    CRON_TZ=Asia/Shanghai
    0 8 * * * /task.sh  # 在亚洲/上海时区的8点执行
  • 权限控制 :通过 /etc/cron.allow/etc/cron.deny 限制用户。

  • 秒级任务 :Cron 不支持秒级,需结合 sleep 或改用 systemd timer


9. 示例场景

  • 每天备份数据库

    bash 复制代码
    0 2 * * * /usr/bin/mysqldump -u root dbname > /backup/db.sql
  • 每周清理临时文件

    bash 复制代码
    0 4 * * 1 /bin/rm -rf /tmp/*
  • 每10分钟检查服务状态

    bash 复制代码
    */10 * * * * /usr/bin/systemctl check-service nginx

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

相关推荐
Cloud_Air75413 分钟前
从零开始使用SSH链接目标主机(包括Github添加SSH验证,主机连接远程机SSH验证)
运维·ssh
李詹18 分钟前
Steam游戏服务器攻防全景解读——如何构建游戏级抗DDoS防御体系?
服务器·游戏·ddos
你熬夜了吗?21 分钟前
spring中使用netty-socketio部署到服务器(SSL、nginx转发)
服务器·websocket·spring·netty·ssl
joke_xiaoli1 小时前
tomcat Server 连接服务器 进展
java·服务器·tomcat
Hello.Reader1 小时前
基于 Nginx 的 WebSocket 反向代理实践
运维·websocket·nginx
北冥有鱼被烹1 小时前
【微知】/proc中如何查看Linux内核是否允许加载内核模块?(/proc/sys/kernel/modules_disabled)
linux·服务器
qq_273900232 小时前
CentOS系统防火墙服务介绍
linux·运维·centos
小余吃大鱼2 小时前
CentOS中在线安装Docker(超详细)
linux·docker·centos
程序员JerrySUN2 小时前
驱动开发硬核特训 · Day 19:字符设备驱动实战(控制 LED)
linux·驱动开发
小灰灰__2 小时前
Linux安装ffmpeg7.1操作说明
linux·运维·服务器