【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,可以实现自动化运维任务,如备份、监控、清理等。建议结合日志记录和环境变量设置,确保任务稳定运行。

相关推荐
Christal_pyy几秒前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
李狗蛋儿啊1 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
s_fox_2 小时前
nginx ngx_http_module(7) 指令详解
运维·nginx·http
EasyNVR2 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
CarryBest2 小时前
Jenkins 环境搭建---基于 Docker
运维·jenkins
若云止水3 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options
运维·nginx
s_fox_3 小时前
nginx ngx_http_module(9) 指令详解
运维·nginx·http
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端