这里志文工作室要为您介绍的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