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代表凌晨两点整)
# * 天
# * 月
# * 年
相关推荐
郝学胜-神的一滴25 分钟前
Python 鸭子类型:优雅的多态哲学,让代码更自由
linux·服务器·开发语言·python·网络协议
北冥湖畔的燕雀25 分钟前
POSIX信号量操作全解析
linux·运维·服务器
feng_you_ying_li1 小时前
linux之重定向原理与缓冲区基本介绍
linux
晚风_END4 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
暴力求解9 小时前
Linux---线程基础
linux·运维·服务器
JAVA面经实录9179 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END9 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
GanGanGanGan_9 小时前
Rocky Linux 9 + XFCE 编译安装 fcitx5 + Rime 教程
linux·centos
咖喱o10 小时前
QinQ/VLAN Stacking
linux·运维·服务器·网络
xiaoye-duck10 小时前
《Linux系统编程》Linux指令 (二):从零开始理解Linux基础指令
linux