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代表凌晨两点整)
# * 天
# * 月
# * 年
相关推荐
代码村新手几秒前
Linux-环境变量
linux
kmomo..4 分钟前
Linux 驱动开发学习笔记:I2C 子系统从入门到实践
linux·驱动开发·学习
敲上瘾9 分钟前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
倔强的石头10625 分钟前
【Linux指南】进程通信系列(二):匿名管道 —— pipe 的本质、fork 继承与四种读写规则
java·linux·运维
一条破秋裤27 分钟前
09-读写多个sys属性文件
linux
小张成长计划..35 分钟前
【Linux】25:线程概念和控制
java·linux·jvm
硅基手札38 分钟前
【Linux 内核专栏 18】进程间通信 IPC(下)— Socket·Netlink·fd 三件套·futex·线程同步
linux·运维·驱动开发·单片机·嵌入式硬件·mcu·架构
djjjx.1 小时前
Linux进程篇(二):深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·服务器
贵州诚鑫致达科技有限公司10 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
澜山奕秋13 小时前
RHCSA
linux·运维·服务器