Linux定时启动jar应用shell脚本分享

1、如何精确找到jar应用进程

shell 复制代码
# 以 dist-app-manage.jar 为例
[root@localhost dist-app-manage-8083]# ps -ef|grep dist-app-manage.jar 
root       5134   5033  0 21:24 pts/0    00:00:00 grep --color=auto dist-app-manage.jar
root      21766      1  1 Sep02 ?        03:16:25 java -jar dist-app-manage.jar --server.port=8083
root      34853      1  1 Sep11 ?        00:48:09 java -jar /opt/huaian/application/report-manager-8070/dist-app-manage.jar --server.port=8070
[root@localhost dist-app-manage-8083]# 

# 以上可以看出如果是集群环境,我们只是使用jar文件名来查找进程的话,会查出来多个
# 所以我们加上命令行参数就能精确定位某个jar进程,例如

#!/bin/bash
path=/opt/huaian/application/report-manager-8070/dist-app-manage.jar
pid=$(ps aux | grep 'java -jar '$path' --server.port=8070' | awk '{print $2}')
echo "debug $pid"

2、编辑启动脚本

我们要实现的功能也很简单,就是精确找到jar应用的进程ID,判断是否有进程ID,如果有进程ID就杀死进程,否则直接启动即可。详见以下脚本:

vi start.sh

shell 复制代码
#!/bin/bash
# java -Xmx8g -Xms4g -Xmn2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseParallelGC -XX:+UseParallelOldGC -jar dist-app-cvt.jar --server.port=8088 --spring.datasource.url=jdbc:h2:./dist-app-cvt --cvt.cache-path=./dist-cvt
JAR_PATH=/home/application/dist-cvt-8088/dist-app-cvt.jar
APP_LOG_PATH=/home/application/dist-cvt-8088/app.log

pid=$(ps aux | grep 'java -Xmx8g -Xms4g -Xmn2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseParallelGC -XX:+UseParallelOldGC -jar '$JAR_PATH' --server.port=8088 --spring.datasource.url=jdbc:h2:./dist-app-cvt --cvt.cache-path=./dist-cvt' | awk '{print $2}')

if [ -n "$pid" ]; then
    # kill process
    echo "===> [$JAR_PATH] pid = $pid"
    kill -9 $pid
    sleep 5
fi

# 删除日志文件
rm -rf $APP_LOG_PATH

# 导出outsidein环境变量
source /etc/profile.d/ev.sh

nohup java -Xmx8g -Xms4g -Xmn2g -XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+UseParallelGC \
-XX:+UseParallelOldGC \
-jar $JAR_PATH \
--server.port=8088 \
--spring.datasource.url=jdbc:h2:./dist-app-cvt \
--cvt.cache-path=./dist-cvt \
>> $APP_LOG_PATH 2>&1 &

new_pid=$(ps aux | grep 'java -Xmx8g -Xms4g -Xmn2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseParallelGC -XX:+UseParallelOldGC -jar '$JAR_PATH' --server.port=8088 --spring.datasource.url=jdbc:h2:./dist-app-cvt --cvt.cache-path=./dist-cvt' | awk '{print $2}')

if [ -n "$new_pid" ]; then
    # new process id
    echo "===> start success new pid = $new_pid"
else 
    echo "===> start error not found [ $JAR_PATH ] start process"
fi

3、设置定时任务

shell 复制代码
# 查看当前系统定时任务
crontab -l

# 编辑定时任务
crontab -e
0 6 * * * /home/application/dist-cvt-8088/start.sh
# 0 分
# 6 时(6代表凌晨两点整)
# * 天
# * 月
# * 年
相关推荐
我不要放纵5 分钟前
LVS集群搭建
linux·服务器·lvs
阿巴~阿巴~10 分钟前
自主Shell命令行解释器
linux·运维·服务器
许白掰10 分钟前
Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
linux·学习·借助 u 盘拷贝程序到开发板上·借助 tf卡拷贝程序到开发板上
YuTaoShao2 小时前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
退役小学生呀2 小时前
十五、K8s可观测能力:日志收集
linux·云原生·容器·kubernetes·k8s
van叶~2 小时前
Linux探秘坊-------15.线程概念与控制
linux·运维·服务器
Andy杨4 小时前
20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
linux·docker·容器
写写闲篇儿7 小时前
Python+MongoDB高效开发组合
linux·python·mongodb
一个龙的传说9 小时前
linux 常用命令
linux·服务器·zookeeper