linux(centos)中的cron计划任务配置方法

目录
[隐藏]

这里志文工作室要为您介绍的cron来源于希腊单词chronos(意为“时间”),指linux系统下一个自动执行指定任务的程序(计划任务)。

1 crontab 命令及选项

crontab -u [-l, -r, -e]
  • -u 指定一个用户
  • -l 列出某个用户的任务计划
  • -r 删除某个用户的任务
  • -e 编辑某个用户的任务

2 crontab 文件语法与写法

可用 crontab -e 命令来编辑,编辑的是 /var/spool/cron 目录下对应用户的 cron 文件,也可以直接修改 /etc/crontab 文件。具体格式如下:

Minute    Hour    Day    Month    Week    command
分钟       小时     天     月      星期      命令
0-59      0-23    1-31   1-12     0-6     command

每个字段代表的含义如下:

  • Minute 每个小时的第几分钟执行该任务
  • Hour 每天的第几个小时执行该任务
  • Day 每月的第几天执行该任务
  • Month 每年的第几个月执行该任务
  • DayOfWeek 每周的第几天执行该任务,0表示周日
  • Command 指定要执行的程序 、脚本或命令

几个特殊符号及含义:

  • * 代表取值范围内的数字
  • / 代表”每”
  • - 代表从某个数字到某个数字
  • , 分开几个离散的数字

定时任务参数示例及说明:

# .---------------- 分钟,取值范围为 0-59
# |  .------------- 小时,取值范围为 0-23
# |  |  .---------- 日,取值范围为 1-31
# |  |  |  .------- 月,取值范围为 1-12
# |  |  |  |  .---- 星期,取值范围为 0-7,0 和 7 都表示星期日
# |  |  |  |  |      .-- 要执行的命令
# |  |  |  |  |      |
  0  1  *  *  * root /root/test-hello.sh

3 关于 crontab 的配置文件

crontab 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置 crontab 任务运行环境的变量:

  • SHELL 变量的值指定shell 环境(此处默认为 bash shell)
  • PATH 变量定义用来执行命令的程序路径
  • MAILTO cron 任务的输出被邮寄给 MAILTO 变量定义的用户名,如果 MAILTO 变量被定义为空白字符串(MAILTO=””),电子邮件就不会被寄出
  • HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

run-parts/etc/cron.<hourly|daily|weekly|monthly> 目录:

如在 /etc/crontab 文件中 run-parts 部分所示,它使用 run-parts 脚本来执行存在于 /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly 目录中的脚本,这些脚本被相应地按照预设时间在每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本,并且具有可执行权限(chmod u+x filename)。

/etc/cron.d 目录:

如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

cron 配置实例参考

  • 5 * * * * ls 指定每小时的第5分钟执行一次ls命令
  • 30 5 * * * ls 指定每天的 5:30 执行ls命令
  • 30 7 8 * * ls 指定每月8号的7:30分执行ls命令
  • 30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
  • 30 6 * * 0 ls 指定每星期日的6:30执行ls命令 [注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等]
  • 30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
  • 25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
  • */15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
  • 30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令 ]
  • 50 7 * * * root run-parts /etc/cron.daily 每天 7:50 以 root 身份执行 /etc/cron.daily 目录中的所有可执行文件。(注:run-parts 参数表示,执行后面目录中的所有可执行文件)
  • 10,20,30 * * * * echo "第10、20、30分钟输出一次" >> /tmp/cron1.txt 第10、20、30分钟输出到 /tmp/cron1.txt
  • 0 */2 * * * lzw.me /usr/bin/somecommand >> /dev/null 2>&1 以用户 lzwme 的身份每两小时就运行某个程序

4 CentOS 中使用 crontab 命令及管理概览

# 检测是否已安装
rpm -qa | grep crontab

# 使用 yum 安装 crontab
yum install -y crontabs

# 查看状态
systemctl status crond
# 设置 crontab 开机自启
systemctl enable crond
# 手动启动 crontab
systemctl start crond

# 编辑当前用户的定时任务
crontab -e

#查看 crontab 已保存的定时任务
crontab -l

示例:创建一个每日 5 点执行的定时任务

新建文件 /root/test-hello.sh,内容示例:

#! /bin/bash
t=$(date +%Y%m%d%H%M%S)

echo $t > /var/log/test-hello.log

执行 crontab -e,新增一行:

0 5 * * * root /root/test-hello.sh
点赞 (0)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code