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代表凌晨两点整)
# * 天
# * 月
# * 年
相关推荐
东方佑2 小时前
自动调整PPT文本框内容:防止溢出并智能截断文本
linux·运维·powerpoint
zhougl9962 小时前
html处理Base文件流
linux·前端·html
泥土编程4 小时前
kubekey -实现懒人一键部署K8S集群
linux·运维
wirepuller_king7 小时前
创建Linux虚拟环境并远程连接,finalshell自定义壁纸
linux·运维·服务器
在野靡生.7 小时前
Ansible(1)—— Ansible 概述
linux·运维·ansible
风123456789~7 小时前
【Linux运维】查询指定日期的上月
linux·运维·服务器
我没想到原来他们都是一堆坏人8 小时前
利用vmware快速安装一个可以使用的centos7系统
linux·虚拟机
x-cmd8 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
weitinting8 小时前
Ali linux 通过yum安装redis
linux·redis
myloveasuka8 小时前
[Linux]从硬件到软件理解操作系统
linux·开发语言·c++