当前位置: 首页 > news >正文

配置jar包开机自启动,会在启动之后自动停止

通过systemctl服务启动

该方式将java应用的启动脚本托管给systemctl服务,通过systemctl的一系列命令配置应用的开机启动。
1)进入到系统的/usr/lib/systemd/system目录下

cd /etc/systemd/system

2)添加.service文件

vim test.service
[Unit]
#服务描述 
Description=test
#当前服务在某个服务启动之后启动
After=syslog.target network.target[Service]
#systemctl进程运行的类型,有多种类型,默认为simple通过主进程启动,forking后台启动也就是systemctl主进程启动后会再生成一个子进程执行当前服务
Type=forking
#存放应用进程号的文件路径为绝对路径
PIDFile=/home/service/pid
#配置应用启动命令,应用的启动脚本路径必须为绝对路径
ExecStart=/home/service/startup.sh start
#配置应用的重启命令
ExecReload=/home/service/startup.sh restart
#配置应用的停止命令 
ExecStop=/home/digital/service/startup.sh stop
#表示给应用分配独立的临时空间 
PrivateTmp=true
#指定启动应用的用户
User=test
#指定用户的用户组
Group=test    
#等待应用的启动时间,单位为秒,0表示禁用,如果在配置的时间内收到启动完成的信号,服务被认为执行失败然后自动退出 
TimeoutStartSec=0
# 杀掉指定进程,none表示没有进程会被杀掉,只执行stop操作
KillMode=none[Install]
WantedBy=multi-user.target

在配置文件中添加了TimeoutStartSec和KillMode两个参数主要是为了防止java应用程序通过systemctl启动成功后进程会被自动干掉的问题,因为我在配置的过程中碰到一个问题就是在java应用程序已经成功启动一段时间后会进程会被莫名奇妙的干掉,尝试了多种方式,比如在配置文件中加上Restart=always参数发现应用会被不停地杀掉重启不能解决根本问题,最后发现配置文件中添加

TimeoutStartSec=0和KillMode=none后问题解决。

3)执行reload命令,使配置生效

sudo systemctl daemon-reload
  1. 将应用的执行命令设置为开机自动启动
# 设置开机启动
sudo systemctl enable test.service
# 设置开机不启动
sudo systemctl disabled test.service

5)手动启动应用程序

sudo systemctl start test.service

如果启动异常可通过systemctl status查看应用启动的状态

sudo systemctl status test.service

相关文章:

  • TreeBERT:基于树的编程语言预训练模型。
  • 都用HTTPS了,还能被查出浏览记录?
  • Python学习-shutil模块和OS模块学习
  • Java程序设计2023-第六次上机测试
  • 前端框架Vue学习 ——(三)Vue生命周期
  • 入门 SpringCloudStream 之 RocketMq 实践全集
  • 【t5 pytorch版源码学习】t5-pegasus-pytorch源码学习
  • 各种各类好用热门API推荐
  • 测试开发之系统篇-Docker常用操作
  • 容器滚动更新过程中流量无损
  • ActiveMq学习⑦__ActiveMq协议
  • Why Java ?
  • 深度学习之基于Tensorflow卷积神经网络花卉识别系统
  • 【JVM】JDBC案例打破双亲委派机制
  • 【案例】3D地球
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [笔记] php常见简单功能及函数
  • 【翻译】babel对TC39装饰器草案的实现
  • ES6--对象的扩展
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java,console输出实时的转向GUI textbox
  • Java精华积累:初学者都应该搞懂的问题
  • jdbc就是这么简单
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mysql优化
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • passportjs 源码分析
  • Python socket服务器端、客户端传送信息
  • Vue全家桶实现一个Web App
  • 对象管理器(defineProperty)学习笔记
  • 猴子数据域名防封接口降低小说被封的风险
  • 计算机常识 - 收藏集 - 掘金
  • 人脸识别最新开发经验demo
  • 如何设计一个比特币钱包服务
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #stm32驱动外设模块总结w5500模块
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (篇九)MySQL常用内置函数
  • (十一)手动添加用户和文件的特殊权限
  • (转)jQuery 基础
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)原始图像数据和PDF中的图像数据
  • .net Signalr 使用笔记
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .netcore如何运行环境安装到Linux服务器
  • .NET构架之我见
  • .net和php怎么连接,php和apache之间如何连接
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @JoinTable会自动删除关联表的数据