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://tool.lu/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

 

posted @ 2022-01-10 15:50  Java小白的搬砖路  阅读(125)  评论(0编辑  收藏  举报