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

相关推荐
你想考研啊1 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks1 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
snoopyfly~2 小时前
Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。
java·服务器·ubuntu
独行soc2 小时前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)
linux·科技·安全·网络安全·面试·渗透测试
BD_Marathon2 小时前
Ubuntu下Tomcat的配置
linux·ubuntu·tomcat
饥饿的半导体2 小时前
Linux快速入门
linux·运维
BD_Marathon2 小时前
Ubuntu:Tomcat里面的catalina.sh
linux·ubuntu·tomcat
BD_Marathon2 小时前
设置LInux环境变量的方法和区别_Ubuntu/Centos
linux·ubuntu·centos
Me4神秘2 小时前
Linux国产与国外进度对垒
linux·服务器·安全
zhaowangji3 小时前
ubuntu 20.04 安装中文输入法 (sougou pin yin)
linux·ubuntu