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

 

posted @   Java小白的搬砖路  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2021-01-10 IDEA每次创建Maven工程都需要重新配置maven信息的解决方案
2021-01-10 11、简单用户注册实现:maven+servlet+mybatis+spring

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示