一、crontab使用
1.安装crontab
一般 CentOS 会默认安装了 crontab
,执行下面命令,查看是否安装:
rpm -qa | grep crontab
如果查询结果类似于下面,说明已安装:
crontabs-1.11-6.20121102git.el7.noarch
如果结果为空,说明没有安装,执行下面命令进行安装即可:
yum install -y crontabs
2.crontab常用命令
查看 crontab
运行状态:
systemctl status crond
设置 crontab
开机自启:
systemctl enable crond
启动 crontab
:
systemctl start crond
查看当前用户的定时任务:
crontab -l//查看root用户的crontab任务
crontab -u root -l
编辑当前用户的定时任务:
crontab -e
CentOS7上的cron命令
systemctl start crond.service //启动服务
systemctl stop crond.service //关闭服务
systemctl restart crond.service //重启服务
systemctl reload crond.service //重新载入配置
systemctl status crond.service //查看状态
注意!!第一次使用crontab时会报以下错误:
crontab: "/usr/bin/vi" exited with status 1
原因是vi编辑器的问题,比较简单的解决办法是直接执行
EDITOR=vim crontab -e
然后按i插入数据,保存退出即可,下次编辑直接用
crontab -e
二、设置定时任务
这里我们以定时重启tomcat为例。
在 root
目录下创建一个 restarttomcat
文件夹:注意!!必须在root目录下创建,因为启动crontab是,它会去读取root目录下的定时任务
mkdir -p /root/restarttomcat
然后在 restarttomcat
文件夹 下创建一个脚本 cqtomcat.sh
:
vim /root/restarttomcat/cqtomcat.sh
按 i
进入编辑状态,粘贴下面内容:
#!/bin/bash
tomcatPath=/opt/module/apache-tomcat-9.0.67
binPath="$tomcatPath/bin"
echo "[info][$(date +'%F %H:%M:%S')]正在监控tomcat,路径:$tomcatPath"
echo "[info][$(date +'%F %H:%M:%S')]正在监控tomcat,路径:$tomcatPath bin路径:$binPath"
pid=`ps aux | grep "/opt/module/apache-tomcat-9.0.67/bin" | grep -v grep | grep -v retomcat | awk '{print $2}'`
echo "[info][$(date +'%F %H:%M:%S')]tomcat进程为:$pid"
if [ -n "$pid" ]; thenecho "[info][$(date +'%F %H:%M:%S')]tomcat进程为:$pid"echo "[info][$(date +'%F %H:%M:%S')]tomcat已经启动,准备使用shutdown命令关闭..."$binPath"/shutdown.sh"sleep 2pid=`ps aux | grep "/opt/module/apache-tomcat-9.0.67/bin" | grep -v grep | grep -v retomcat | awk '{print $2}'`echo "[info][$(date +'%F %H:%M:%S')]tomcat进程为:$pid"if [ -n "$pid" ]; thenecho "[info][$(date +'%F %H:%M:%S')]使用shutdown命令关闭失败,准备kill进程..."kill -9 $pidecho "[info][$(date +'%F %H:%M:%S')]kill进程完毕!"sleep 1elseecho "[info][$(date +'%F %H:%M:%S')]使用shutdown命令关闭成功!"fi
elseecho "[info][$(date +'%F %H:%M:%S')]tomcat未启动!"
fi
echo "[info][$(date +'%F %H:%M:%S')]准备启动tomcat..."
$binPath"/startup.sh"
按 Esc
键,再输入 :wq
保存文件。
注意!!一定要赋予文件权限
要进入到文件所在文件夹,才能使用该命令进行赋权:cd /opt/module/apache-tomcat-9.0.67/bin
chmod 777 cqtomcat.shchmod 777 shutdown.sh
执行下面命令即可编辑当前用户的定时任务:
crontab -e
每天凌晨2:00重启一次tomcat,那么可以按下 i
进入编辑状态,粘贴下面内容:
00 02 * * * bash /root/restarttomcat/cqtomcat.sh
该语句其实是写在/var/spool/cron/root文件下的
然后通过 crontab -l
可查看到已保存的定时任务:
00 02 * * * bash /root/restarttomcat/cqtomcat.sh
crontab不执行原因
- 检查
crontab
服务是否正常 - 检查脚本路径是否绝对路径
- 检查脚本路径前是否添加了
bash
或/etc/profile;/bin/sh
如果以上都没问题,那就要通过日志查找问题所在了。
三、*定时任务描述语法
crontab中每一个定时任务的格式由6部分组成,分别是分钟、小时、天、月、星期以及命令,前5部分用来配置任务触发时机,中间使用空格隔开,如下:
minute hour day month dayofweek command
minute – 表示分钟,值的范围是从0到59的整数
hour – 表示小时,值的范围是从0到23的整数
day – 表示天,值的范围是从1到31的整数
month – 表示月,值的范围是从1到12的整数
dayofweek – 表示星期,值的范围是从0到6的整数 (0表示周日)
command – 需要执行的命令(shell命令路径 >> 打印日志路径 表示执行tomcat.sh脚本,并且把结果日志打印到shlo.txt中)
时间部分除了使用估计数字以外还可以配合星号(*),逗号(,),斜杠(/),横杠(-)组合来表示其他意义。
1. 星号(*)
表示任意值,比如:30 01 * * * command #每天的1:30执行命令
2. 逗号(,)
表示指定的时间,比如:30 01 1,10,20 * * command #每月的1号、10号、20号的1:30分执行命令
3. 斜杠(/)
表示每隔多长时间,比如:* */2 * * * command #每个2小时执行一次命令
4. 横杠(-)
表示连续时间,比如:* 1-7/1 * * * command #凌晨1点-7点之前每隔一小时执行一次命令
四、crontab日志所在地
定时任务无论执行是否成功,都会往/var/spool/mail/root文件里发一份报错日志。
其余的日志则都会在/var/log/cron给出
五、可能会出现的报错
1.如果查看/var/spool/mail/root有以下报错
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
则解决方案是;
在cqtomat.sh文件里,加上export JAVA_HOME=/opt/module/jdk1.8.0_301export JRE_HOME=$JAVA_HOME/jre