Linux配置JAR包为服务实现自启动

一、实现bash脚本

1.1 绘图工具

绘图需安装idea的插件plantUML-Integration

只需要上图一个就可以,别的也不需要装。

启动服务的逻辑如下

关闭服务的逻辑如下

1.2 逻辑实现

在/root路径下创建entrance文件,实现逻辑如下

#!/usr/bin/env bash
# 2>&1的含义
# 1表示标准输出
# 2表示标准错误输出
# 2>&1表示将标准错误输出重定向到标准输出# 配置jar程序的pid保存文件
jar_pid=/root/jar_pid
# 配置jar的绝对路径
jar=/root/http-proxy-boot.jarif [ "$1" = "start" ]; then# 如果jar_pid文件存在if [ -f "$jar_pid" ]; then# 如果jar_pid文件有值if [ -s "$jar_pid" ]; thenecho "Existing PID file found during start."# 如果jar_pid文件可读if [ -r "$jar_pid" ]; thenPID=`cat "$jar_pid"`# 与直接执行命令相比, 这样可以抑制输出ps -p $PID >/dev/null 2>&1# 等于0if [ $? -eq 0 ] ; thenecho "$jar appears to still be running with PID $PID. Start aborted."echo "If the following process is not a $jar process, remove the PID file and try again:"ps -f -p $PIDexit 1elseecho "Removing/clearing stale PID file."# 与直接执行命令相比, 这样可以抑制输出rm -f "$jar_pid" >/dev/null 2>&1if [ $? != 0 ]; then# 可写权限if [ -w "$jar_pid" ]; thencat /dev/null > "$jar_pid"elseecho "Unable to remove or clear stale PID file. Start aborted."exit 1fififielseecho "Unable to read PID file. Start aborted."exit 1fielserm -f "$jar_pid" >/dev/null 2>&1if [ $? != 0 ]; thenif [ ! -w "$jar_pid" ]; thenecho "Unable to remove or write to empty PID file. Start aborted."exit 1fifififi# 将命令行参数往前移一个. 比如sh test.sh 1 2, 在shift前, $1=1 $2=2, 在shift后, $1=2shift# eval是将字符串解析为命令执行,如 eval "ls -l"就相当于直接运行性ls -leval "nohup java -jar \$jar >/dev/null 2>&1 &"# 将pid写入到jar_pid文件中echo $! > "$jar_pid"echo "$jar started."
elif [ "$1" = "stop" ]; thensleep=5# 当force为1时, 执行kill -9force=0shift# 若文件存在if [ -f "$jar_pid" ]; then# 若jar_pid有值if [ -s "$jar_pid" ]; then# kill -0不影响进程执行,而是检查进程是否正在运行kill -0 `cat "$jar_pid"` >/dev/null 2>&1# 如果大于0表示异常if [ $? -gt 0 ]; thenecho "PID file found but either no matching process was found or the current user does not have permission to stop the process. Stop aborted."exit 1fielseecho "PID file is empty and has been ignored."fielseecho "$jar_pid was set but the specified file does not exist. Is $jar running? Stop aborted."exit 1fi# 与直接kill -15相比, 这样可以抑制输出kill -15 `cat "$jar_pid"` >/dev/null 2>&1if [ -f "$jar_pid" ]; thenwhile [ $sleep -ge 0 ]; do# kill -0不影响进程执行,而是检查进程是否正在运行kill -0 `cat "$jar_pid"` >/dev/null 2>&1# 如果大于0表示异常, 表示进程已被关闭if [ $? -gt 0 ]; thenrm -f "$jar_pid" >/dev/null 2>&1# 如果删除失败if [ $? != 0 ]; thenif [ -w "$jar_pid" ]; thencat /dev/null > "$jar_pid"force=0elseecho "The PID file could not be removed or cleared."fifiecho "$jar stopped."breakfiif [ $sleep -gt 0 ]; thensleep 1fiif [ $sleep -eq 0 ]; thenecho "$jar did not stop in time."if [ $force -eq 0 ]; thenecho "PID file was not removed."fiecho "To aid diagnostics a thread dump has been written to standard out."# kill -3 与 kill -15 类似, 只是kill -3 会多了一步生成核心存储,用于后续调试。kill -3适用于程序无响应时kill -3 `cat "$jar_pid"`fi# 自减sleep=`expr $sleep - 1`donefiKILL_SLEEP_INTERVAL=5if [ $force -eq 1 ]; thenif [ -f "$jar_pid" ]; thenPID=`cat "$jar_pid"`echo "Killing $jar with the PID: $PID"kill -9 $PIDwhile [ $KILL_SLEEP_INTERVAL -ge 0 ]; dokill -0 `cat "$jar_pid"` >/dev/null 2>&1if [ $? -gt 0 ]; thenrm -f "$jar_pid" >/dev/null 2>&1if [ $? != 0 ]; thenif [ -w "$jar_pid" ]; thencat /dev/null > "$jar_pid"elseecho "The PID file could not be removed."fifiecho "The $jar process has been killed."breakfiif [ $KILL_SLEEP_INTERVAL -gt 0 ]; thensleep 1fiKILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `doneif [ $KILL_SLEEP_INTERVAL -lt 0 ]; thenecho "$jar has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."fififi
elseecho "commands:"echo " start      Start jar"echo " stop       Stop jar"
fi

启动和关闭命令如下

sh /root/entrance start
sh /root/entrance stop

二、配置systemd服务

使用systemd的好处时,他由系统管理,统一的管理命令,而且可以支持自启动等操作。

延用上面的bash脚本,创建systemd服务

cat > /usr/lib/systemd/system/http-proxy-boot.service <<EOF
[Unit]
Description=http-proxy-boot
After=network.target
[Service]
Type=forking
# restart时, 先执行ExecStop, 再执行ExecStart
ExecStart=/root/entrance start
ExecStop=/root/entrance stop
PrivateTmp=true
# kill按理说,应该返回状态0,但是java比较特殊,返回的是143
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF

之后就可以进行操作啦

systemctl start|stop|restart|enable|disable http-proxy-boot

三、参考致谢

如何在统信UOS系统中设置tomcat开机启动_统信uos系统部署tomcat-CSDN博客

tomcat/bin/catalina.sh at main · apache/tomcat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模.皮尔逊相关系数假设检验

一、步骤 查表找临界值 二、更好的方法 三、使用条件 作图可以使用spss 这个图对不对还不好说&#xff0c;因为还没进行正态分布的验证 四、正态分布验证 &#xff08;1&#xff09;JB检验 所以之前的数据的那个表是错的&#xff0c;因为不满足正态分布 &#xff08;2&#xff…

设置了uni.chooseLocation,小程序中打不开

设置了uni.chooseLocation&#xff0c;在小程序打不开&#xff0c;点击没反应&#xff0c;地图显现不出来&#xff1b; 解决方案&#xff1a; 1.Hbuilder——微信开发者工具路径没有配置 打开工具——>设置 2.微信小程序服务端口没有开 解决方法&#xff1a;打开微信开发…

[Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

文章目录 1、进程优先级1.1 Linux下查看进程优先级1.2 Linux 进程优先级的修改PRI and NItop命令配合操作更改优先级 1.3 竞争 独立 并行 并发 2、进程间切换3、Linux2.6内核进程调度队列3.1 活跃进程3.2 过期进程 4 main函数参数 — 命令行参数4.1 利用main函数的参数实现一个…

强化学习应用(一):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

在CentOS上设置和管理静态HTTP网站的版本控制

在CentOS上设置和管理静态HTTP网站的版本控制是一项重要的任务&#xff0c;它可以帮助您跟踪和回滚对网站所做的更改&#xff0c;确保数据的一致性和完整性。以下是在CentOS上设置和管理静态HTTP网站的版本控制的步骤&#xff1a; 安装版本控制系统在CentOS上安装Git或其他版本…

dcat admin框架开发前台

前言 dcat admin框架是一款后台框架&#xff0c;我们需要使用laravel开发前台框架&#xff0c;dcat admin本身基于laravel&#xff0c;没必要在重新创建前台项目&#xff0c;这篇文章记录我的开发过程。 开发过程 1. 迁移数据库(非必要) 对于dcat admin来说本身存在一个后台…

GPT-4V的图片识别和分析能力原创

GPT-4V是OpenAI开发的大型语言模型&#xff0c;是GPT-4的升级版本。GPT-4V在以下几个方面进行了改进&#xff1a; 模型规模更大&#xff1a;GPT-4V的参数量达到了1.37T&#xff0c;是GPT-4的10倍。 训练数据更丰富&#xff1a;GPT-4V的训练数据包括了1.56T的文本和代码数据。 …

PyCharm连接服务器 - 2

文章目录 PyCharm连接服务器-21.如何连接服务器&#xff1f;2.如何在终端窗口打开SSH连接&#xff1f;3.Terminal终端出现中文乱码的解决办法&#xff1f;4.如何查看远程服务器的树目录结构&#xff1f;5.如何配置代码同步&#xff1f;6.如何为项目配置远程服务器中的python解释…

第5章案例课:部署Tomcat及其负载均衡

这个实验需要3台虚拟机 192.168.9.40 9.31 9.32 去FTP 下载软件包 192.168.9.40 和 192.168.9.31 都要这里面的配置[rootnode1 ~]# mount /dev/cdrom /mnt/ //挂载[rootnode1 ~]# rpm -ivh /mnt/Packages/ftp-0.17-67.el7.x86_64.rpm //下载 FTP 软件包[roo…

构建 Maven 项目时可能遇到的问题

文章目录 构建 Maven 项目时可能遇到的问题1. Maven 自动下载依赖后&#xff0c;在本地仓库中找不到2. 运行时报错如下&#xff1a;Error: java 不支持发行版本 53. 创建 Maven 项目后 pom.xml 文件为空4. 在 Settings 中 Update 了阿里云远程仓库&#xff0c;导致整个项目不能…

Windows+Qt5.14.2+android x86配置与处理adb报错

资源下载 可在部分国内镜像源下载Qt5.14.2&#xff1a;Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror其他工具 android studio:下载 Android Studio 和应用工具 - Android 开发者 | Android Developerssdk manager 、ndk、java 安装过…

【SSM框架】SpringMVC

SpringMVC简介 SpringMVC概述 SpringMvC是一种基于Java实现MVC模型的轻量级web框架 SpringMVC技术与Servlet技术功能等同&#xff0c;用于表现层功能开发 SpringMVC入门 1、导入坐标 <dependency><groupId>javax.servlet</groupId><artifactId>ja…

ENNOID-BMS从控板分析-基于LTC6813的版本

LTC6813简单说明 单体电压采集部分&#xff0c;总共可以采集18个电芯电压&#xff0c;这18个电压分别交给3个16位Delta-Sigma ADC来进行采样&#xff1b;官方手册宣称的采样误差低于2.2mV&#xff0c;采样范围为0~5V&#xff0c;所有18个电芯采样一次只要290uS时间。电压均衡部…

Tomcat简介及搭建

1、Tomcat概述 自2017年11月编程语言排行榜 Java 占比 13%&#xff0c;高居榜首&#xff0c;Tomcat也一度成为Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。本篇文章主要讲解如何部署 Tomcat 服务&#xff0c;根据生产环境实现多个虚拟主机的…

SpringCloud Aliba-Nacos-从入门到学废【1】

&#x1f95a;今日鸡汤&#x1f95a; 当你最倒霉地时候一定要扛住。 因为&#xff0c;那正是你运气该上升的时候。 ——《一人之下》 目录 &#x1f9c8;1.Nacos介绍 &#x1f9c2;2.Nacos服务提供者注册 &#x1f953;3.Nacos服务消费者 &#x1f32d;4.Nacos作为配置中心…

瑞幸黑金鹿王者霸屏尊享权益的技术实现方式探讨

上周六&#xff0c;公司加班举办技术专场招聘活动&#xff0c;在忙碌的下午茶歇时间&#xff0c;我尊敬的伟大的韩百万老师提议带着我去瑞幸装了个 BI&#xff0c;扫码领取咖啡的那一个瞬间&#xff0c;瑞幸店内的电视大屏上赫然显示了&#xff1a;韩百万。回来的路上我虚心请教…

SpringCloud:微服务

文章目录 微服务服务架构演变单例架构&#xff08;集中式架构&#xff09;分布式架构 微服务SpringCloud 微服务 服务架构演变 单例架构&#xff08;集中式架构&#xff09; 单例架构&#xff1a; 将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 优点&…

redis(14):缓存雪崩、击穿、穿透及其处理方式

1 Redis 缓存过程 通常后端会采用Mysql等磁盘数据库,可以持久化但是访问慢,高并发时性能差,需要设置Nosql内存型数据库缓存:Redis等; Redis 数据库运行在内存中,因此他的查询速度比 MySql 快的多。所以我们会把一些用户经常查询的数据放在 Redis 中,当 Redis 有的时候…

TCP之三次握手四次挥手与UDP区别

文章目录 1 TCP三次握手四次挥手1.1 数据包说明1.1.1 TCP数据包1.1.2 UDP数据包1.1.3 TCP和UDP差异1.1.4 TCP可靠性传输机制 1.2 三次握手1.2.1 三次握手定义1.2.2 三次握手问题1.2.2.1 问题引入分析1.2.2.2 历史连接1.2.2.3 同步双方初始序列号1.2.2.4 避免资源浪费 1.3 四次挥…

Java项目:07 Springboot的客户管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot客户管理系统 功能模块&#xff1a;登录修改密码客户列表充值列表消费记录客户类型 环境&#xff1a;IDEAjdk1.8Tomcat9MySQL5.7maven3.6…