Linux系统使用service设置程序自启动

news2024/10/6 8:33:35

Linux系统使用service设置程序自启动

  • 整体描述
  • 前期准备
    • 1. 生成pid文件
  • 具体方法
    • 1. 脚本编写
      • 1.1 start.sh脚本
      • 1.2 shutdown.sh脚本
      • 1.3 restart.sh脚本
    • 2. 设置service
      • 2.1 service文件
      • 2.2 设置自启动
      • 2.3 查看设置结果

整体描述

在linux系统里,设置程序自启动是基本操作,我们可以自己写一个service文件,设置自己的程序自启动参数。这里用springboot的jar包程序做示例。

前期准备

1. 生成pid文件

程序启动和杀死依赖pid文件,之前写过一个生成pid文件的文章:链接:在Springboot框架生成pid文件,可以参考一下。

具体方法

目前需要的脚本有3个,其中两个是给系统添加service用的,分别为start.sh和shutdown.sh,还有一个是杀死当前执行java进程的,这个只需要杀死进程就行,不需要写启动的命令,启动是再系统service里完成的。

1. 脚本编写

1.1 start.sh脚本

ldconfig
source ~/.bashrc
nohup java -jar test.jar &

1.2 shutdown.sh脚本

ID=`ps -ef | grep "test.jar" | grep -v grep | awk '{print $2}'`
if  [ ! -n "$ID" ] ;then
    echo "no process running"
else
    kill -9 ${ID}
    echo "kill process ${ID}"
fi

1.3 restart.sh脚本

restart脚本只需要kill掉进程即可。

JAR_NAME="test.jar"
APP_NAME="test"
PIDFile=/var/run/${APP_NAME}.pid
ldconfig
source ~/.bashrc
if [ -f $PIDFile ] ;then
    PID=`cat $PIDFile`
else
    PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
fi

if  [ ! -n "$PID" ] ;then
    echo "no ${APP_NAME} process running"
else
    kill -9 ${PID}
    echo "kill ${APP_NAME} process ${PID}"
fi

for a in {1..100}
do
    PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
    if  [ ! -n "$PID" ] ;then
        echo "${JAR_NAME} has stopped."
        break
    else
        echo "${JAR_NAME} is stopping."
        sleep 2
    fi
done

export LANG=zh_CN.UTF-8

sleep 5

for a in {1..100}
do
    PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
    if  [ ! -n "$PID" ] ;then
        echo "${APP_NAME} is starting."
        sleep 2
    else
        echo "${APP_NAME} start successed, pid= ${PID}"
        break
    fi
done

2. 设置service

2.1 service文件

系统的service在/usr/lib/systemd/system目录下,新建一个test.service的文件:

[Unit]
Description=test
 
[Service]  
#Type=simple
PIDFile=/var/run/test.pid
ExecStart=/app/test/bin/startup.sh  
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=false
Restart=always
RestartSec=10

[Install]  
WantedBy=multi-user.target 

2.2 设置自启动

systemctl enable test

2.3 查看设置结果

systemctl status test

看到如下则表示启动成功:
查看设置结果

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

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

相关文章

基于Vue3.0的优秀低代码项目

在众多开发技术中,Vue组件化开发技术以其卓越的灵活性和高效性备受瞩目。借助Vue3.0的强大功能和简洁易用的语法,你将能够轻松打造出最令人瞩目的低代码项目。 低代码开发正成为当前企业提升运营效率、降低开发成本的首选方案。相较于传统开发模式&#…

基于Singularity 安装 AmpliconSuite-pipeline

基于Singularity 安装 AmpliconSuite-pipeline 按照AmpliconSuite-pipeline官网的Singularity安装方法遇到不少问题,好在都一一解决了,写个文档记录一下我基于Singularity 安装 AmpliconSuite-pipeline的过程。 step1 获取 Singularity镜像 镜像地址&…

如何截掉图片中的一部分?

如何截掉图片中的一部分?在社交媒体的热潮下,我们常常需要将自己生活中的照片或者美景图片分享到互联网或者自己的朋友圈中。然而,有时候我们会发现照片中存在一些不需要的元素,这可能会降低照片的美观程度。针对这种情况&#xf…

分布式核心知识以及常见微服务框架

分布式中的远程调用 在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等,目前主流的远程调用技术有基于HTTP…

C语言刷题训练DAY.10

1.空心正方形图案 解题思路&#xff1a; 这里我们只把四条边的内容打印成*&#xff0c;其他内容打印成空格即可。 解题代码&#xff1a; #include <stdio.h> int main() {int n 0;while (scanf("%d", &n) ! EOF){int i 0;for (i 0; i < n; i) //外…

Stream流报错Duplicate key

目录 1、场景2、问题3、解决办法4、完整代码 1、场景 有一个客户列表&#xff0c;每个item里有客户id、name、客户开的公司。 现在根据客户id分组&#xff0c;以客户id为key&#xff0c;把id相同的放到value里&#xff0c;构建一个Map。 这样可以快速根据id&#xff0c;获取相…

LLM赋能产业数智化业务系统升级的思考

1概述 2022年是人工智能的一个分水岭&#xff0c;ChatGPT&#xff0c;DALL E[ DALL E&#xff1a;是一款可以根据文本描述创建图像的AI工具。]和Lensa[ Lensa&#xff1a;是一款AI美图软件。]等几个面向消费者的应用程序发布了&#xff0c;它们的共同主题是使用生成式人工智能&…

【日常积累】Cookie和Session的区别

背景 会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份&#xff0c;Session通过在服务器端记录信息确定用户身份。 本章将分享一些关于Cooki…

【高危】MarkText<=0.17.1 存在DOM型XSS漏洞 (CVE-2023-2318)

漏洞描述 MarkText 是热门的开源Markdown编辑器&#xff0c;覆盖Windows/Linux/MacOS平台。 MarkText 0.17.1及之前版本中的 pasteCtrl 类未对用户可控的 HTML 内容进行过滤&#xff0c;当用户将攻击者可控的 HTML 代码粘贴至 MarkText 编辑器中时&#xff0c;攻击者可利用DO…

鸿蒙应用开发之基础组件

一、组件简介 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1…

Leetcode---359周赛

题目列表 2828. 判别首字母缩略词 2829. k-avoiding 数组的最小总和 2830. 销售利润最大化 2831. 找出最长等值子数组 一、判断首字母缩略词 纯模拟&#xff0c;代码如下 class Solution { public:bool isAcronym(vector<string>& words, string s) {string tmp…

如何将pdf文件转换成word文档?

如何将pdf文件转换成word文档&#xff1f;PDF文档是我们日常办公中最为常用的电子文档格式的文件&#xff0c;也是在会议、教育培训以及商业营销中经常使用的文档格式。所以说PDF文档的功能较强&#xff0c;且应用场景较多。但是也有例外的时候&#xff0c;比如我们需要将PDF文…

vue项目中使用ts的枚举类型

vue项目中要使用ts的枚举类型需要为script标签的lang属性添加ts属性值 <script lang"ts" setup> </script > 声明枚举类型&#xff1a; //语法 /* enum 枚举名称 {可能的值 }*/ enum scenic_status {"正常" 1,"审核中","暂停…

Prometheus 监控系统---你值得拥有

目录 一&#xff1a;Prometheus 1、Prometheus 概述 2、应用场景 3、Prometheus 的特点 4、Prometheus 的生态组件 &#xff08;1&#xff09;Prometheus server&#xff1a;服务核心组件 &#xff08;2&#xff09;Client Library: 客户端库 &#xff08;3&#xff0…

c语言(12)

第一题 容易下意识认为这个判断是ASCII码值在0到9之间&#xff01; 第二题 第三题 第四题 第五题 第六题 用递归很容易就解决了 第七题

合规试制“精准狙击”秘籍——趣味浅析16949五大质量管理工具

在极其重视产品质量的汽车行业&#xff0c;如何制造出一件合格的产品进而获得主机厂的青睐&#xff0c;就像狙击手射出的子弹是否能命中目标&#xff0c;“百发百中”是每一个汽配供应商的最终梦想。 目前&#xff0c;汽配零部件企业必须通过质量管理体系的认证&#xff0c;才有…

“MyBatis入门及环境搭建“

目录 引言1. 什么是MyBatis2.MyBatis的优势与特点3. MyBatis环境搭建3.1 安装 Java 开发工具包 &#xff08;JDK&#xff09;3.2 下载我的MyBatis插件3.3 创建 MyBatis项目3.4 MyBatis的配置文件 4. MyBatis基本操作5. MyBatis增删改查测试类 6. MyBatis总结 引言 在现代的软件…

网络安全在医疗行业中的重要性

不可否认&#xff0c;现代世界见证了技术和医疗行业的交织&#xff0c;塑造了我们诊断、治疗和管理健康状况的新方式。随着电子健康记录取代纸质文件&#xff0c;远程医疗缩短了患者和医疗服务提供者之间的距离&#xff0c;数字化转型既是福音&#xff0c;也是挑战。最近的全球…

【正点原子STM32连载】第十九章 通用定时器输入捕获实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第十…

一个例子看懂IO模型

1.用户态和内核态 现代操作系统将空间划分为用户空间和内核空间。 用户态&#xff1a;一般都是些应用程序&#xff0c;不能直接的访问内核空间和硬盘。 内核态&#xff1a;操作系统的核心&#xff0c;只有切换到内核态才能操作磁盘。 2.同步、异步、阻塞、非阻塞 我们使用前后…