Crontab学习
前言:
参考链接:
https://www.cnblogs.com/grimm/p/14979399.html
https://blog.csdn.net/brad_chen/article/details/50318297
今天想用一下Linux中自带的crontab服务,做一些定时任务玩玩,发现定时任务居然保存不了。就很奇怪,网上搜下最后发现是设置了权限
在学习linux的时候学习过chattr跟lsattr命令,chattr命令用于改变文件属性。
解决办法:
1、查看目录是否被赋予chattr权限
2、取消权限设置
lsattr /var/spool/cron/root chattr -ai /var/spool/cron/root
现在就可以进行使用crontab命令了:
crontab命令参考:
https://www.bejson.com/othertools/cron/
crontab服务启动命令:
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置
crontab命令:
crontab -e :编辑定时任务 crontab -l :查看当前的定时任务 crontab -r :删除所有的定时任务
查看crontab日志
tail -f /var/log/cron
踩坑:脚本执行了,但是没有启动Tomcat
有个需求,在上午七点开启Tomcat,在晚上七点关闭Tomcat
通过查看日志,发现脚本已经执行了,但是Tomcat没有开启,排查了下原因,是因为Tomcat启动脚本依赖于JDK环境变量
在脚本上面加上需要的环境变量即可:export JAVA_HOME=/usr/local/java/jdk1.8.0_144
#!/bin/bash export JAVA_HOME=/usr/local/java/jdk1.8.0_144 # tomcat的位置 tomcat_home=/opt/tomcat/apache-tomcat-9.0.6-test # 启动tomcat变量 START_TOMCAT=$tomcat_home/bin/startup.sh # 获取进程ID PID=`ps -ef |grep $tomcat_home/conf |grep -v grep | awk '{print $2}'` if [ ! "$PID" ];then # 这里判断TOMCAT进程是否存在 echo "进程不存在,启动项目" >> ./tomcat.log $START_TOMCAT else echo "进程存在,不执行操作" >> ./tomcat.log fi
小栗子:使用cron每分钟向文件中追加一句话
1、创建shell脚本 touch test.sh 2、编辑shell脚本,追加 #!/bin/bash if [ ! -f /test.log ];then echo "— — 文件不存在,创建 — —" touch /test.log echo "hello" >> /test.log else echo "hello" >> /test.log fi 3、修改test.sh的权限 chmod 777 /test.sh 4、添加脚本到crontab定时任务:crontab -e */1 * * * * /test.sh 5、重启crontab systemctl restart crond
使用Crontab表达式每天凌晨4点执行定时任务
1、需求
使用crontab实现一个功能: 每天凌晨4点执行以下操作 1、关闭apache-tomcat-8.5.82-lucene进程,apache-tomcat-8.5.82-lucene这个tomcat的目录是:/mnt/data/app/apache-tomcat-8.5.82-lucene/ 2、重命名/data/project/lucene/article文件夹,和/data/project/lucene/course文件夹,命名规则是文件夹名称+当前日期,比如article-20230215 3、在/data/project/lucene创建文件夹article和course 4、访问连接,等这两个请求执行完毕重启Tomcat https://xxx/manager/servlet/IndexCreateServlet https://xxx/manager/servlet/IndexCreateServletCourse
2、创建crontab定时任务
crontab -e
然后在编辑器中添加以下行:
0 4 * * * /bin/bash /root/script.sh
3、编辑shell脚本:vim /root/script.sh
#!/bin/bash # 程序变量:后台项目Tomcat、索引项目Tomcat、索引文件夹地址、日志文件 tomcat_manager=/data/app/tomcat/apache-tomcat-manager-tb tomcat_lucene=/data/app/tomcat/apache-tomcat-8.0.23-lucene tomcat_lucene_index=/opt/app/lucene log_path=/root/tomcat-index.log #索引访问地址 index_request_1=http://192.168.182.77:8080/manager/servlet/IndexCreateServletCourse index_request_2=http://192.168.182.77:8080/manager/servlet/IndexCreateServlet echo " ==================start【`date +"%Y-%m-%d %H:%M:%S"`】==================" >> ${log_path} #【1】关闭后台项目 PID=`ps -ef |grep ${tomcat_manager}/conf |grep -v grep | awk '{print $2}'` if [ ! "$PID" ];then echo " 后台项目进程不存在,不需要关闭" >> ${log_path} else echo " 后台项目进程存在,关闭Tomcat" >> ${log_path} kill -9 $PID fi sleep 2 #【2】启动后台项目 echo "清理日志文件并启动后台项目" >> ${log_path} echo "" > ${tomcat_manager}/logs/catalina.out ${tomcat_manager}/bin/startup.sh > ${tomcat_manager}/logs/catalina.out 2>&1 & sleep 20 #【3】关闭索引项目 lucent_pid=`ps -ef |grep ${tomcat_lucene}/conf |grep -v grep | awk '{print $2}'` if [ ! "$lucent_pid" ];then # 这里判断TOMCAT进程是否存在 echo "索引项目进程不存在,不需要关闭" >> ${log_path} else echo "索引项目进程存在,关闭Tomcat" >> ${log_path} kill -9 $lucent_pid fi #【4】重命名和创建索引文件夹 echo "重命名索引文件夹" >> ${log_path} cd "$tomcat_lucene_index" mv article "article-$(date +"%Y%m%d")" mv course "course-$(date +"%Y%m%d")" echo "创建索引文件夹" >> ${log_path} mkdir article course #【5】、执行请求 echo "发送索引请求" >> ${log_path} curl ${index_request_1} curl ${index_request_2} #【6】启动索引项目 echo "请求发送完毕,清理搜索日志并重启项目" >> ${log_path} echo "" > ${tomcat_lucene}/logs/catalina.out ${tomcat_lucene}/bin/startup.sh > ${tomcat_lucene}/logs/catalina.out 2>&1 & echo " ==================end【`date +"%Y-%m-%d %H:%M:%S"`】====================" >> ${log_path}
4、给文件添加执行权限
chmod +x /root/script.sh