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

浙公网安备 33010602011771号