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、取消权限设置
1 2 | lsattr / var /spool/cron/root chattr -ai / var /spool/cron/root |
现在就可以进行使用crontab命令了:
crontab命令参考:
https://www.bejson.com/othertools/cron/
crontab服务启动命令:
1 2 3 4 | service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 |
crontab命令:
1 2 3 | crontab -e :编辑定时任务 crontab -l :查看当前的定时任务 crontab -r :删除所有的定时任务 |
查看crontab日志
1 | tail -f / var /log/cron |
踩坑:脚本执行了,但是没有启动Tomcat
有个需求,在上午七点开启Tomcat,在晚上七点关闭Tomcat
通过查看日志,发现脚本已经执行了,但是Tomcat没有开启,排查了下原因,是因为Tomcat启动脚本依赖于JDK环境变量
在脚本上面加上需要的环境变量即可:export JAVA_HOME=/usr/local/java/jdk1.8.0_144
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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、需求
1 2 3 4 5 6 7 8 | 使用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定时任务
1 | crontab -e |
然后在编辑器中添加以下行:
1 | 0 4 * * * /bin/bash /root/script.sh |
3、编辑shell脚本:vim /root/script.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #!/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、给文件添加执行权限
1 | chmod +x /root/script.sh |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2021-01-10 IDEA每次创建Maven工程都需要重新配置maven信息的解决方案
2021-01-10 11、简单用户注册实现:maven+servlet+mybatis+spring