crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行,下面是以centos为例介绍。
-
检测crontab是否安装
crontab -l
如果显示 ‘no crontab for root’ 或者显示当前的任务列表或者不报错,crontab已经安装;
1.安装crontab服务
yum -y install vixie-cron crontabs
2.cron服务开启与关闭
# 查看cond 状态 service crond status # 启动cron service crond start # 关闭cron service crond stop # 重启cron service crond restart
-
crontab命令
通过crontab可以在指定的时间内执行一个shell脚本或一系列的命令;
1.命令格式
crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab -n [ hostname ] crontab -c
-u user:用来设定某个用户的crontab服务;
file:命令文件的名字,作为crontab的任务列表文件并载入crontab中,如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab;
-e:编辑某个用户的crontab文件内容;如果不指定用户,则表示编辑当前用户的crontab文件;
-l:显示crontab文件;如果不指定用户,则表示编辑当前用户的crontab文件;
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件;
-i:在删除用户的crontab文件时给确认提示;
2.crontab文件格式
在/etc/crontab为crontab的全局配置文件
格式实例:
#每一分钟执行脚本 */1 * * * * /xx/xx.sh #每一小时执行脚本 0 */1 * * * /xx/xx.sh #每天21:30执行脚本 30 21 * * * /xx/xx.sh #每周1-5的23:59执行脚本 59 23 * * 1,2,3,4,5 /xx/xx.sh 或 59 23 * * 1-5 /xx/xx.sh #每月的1号,5号 23 号 28 号 的11点30分,执行脚本 30 11 1,5,23,28 * * /xx/xx.sh #每隔两分钟,偶数分钟执行脚本 */2 * * * * /xx/xx.sh #每隔两分钟,奇数分钟执行脚本 1-59/2 * * * * /xx/xx.sh
"*":表示任何时候都匹配
"a,b,c":表示a 或者 b 或者c 执行命令
"a-b":表示a到b之间执行命令
"*/a":表示每隔a(分钟/小时等)执行一次
crontab不能编辑系统级的任务;环境变量的值,在crontab 文件中获取不到;在crontab中%是有特殊含义的,表示换行,使用必须进行转义\%;
-
使用实例
编写一个测试的脚本,chmod +x添加权限
#!/bin/bash echo "$(date +"%Y-%m-%d %H:%M:%S")" >> mytest.log >/dev/null 2>&1
执行crontab -e,添加定时任务,每分钟执行一次
*/1 * * * * /root/demo.sh
重启crontab服务
service crond restart
之后在/root中会出现一个mytest.log文件,每隔一分钟输出一次当前时间;
删除定时服务,要先关闭服务
service crond stop
crontab -e选择需要删除的定时服务,或在/etc/spool/cron中选择需要删除的用户的命令文件;