有些时候运行一个java项目在linux下通过一条简单的java命令即可,如:

#nohup java -jar jenkins.war &   ###这里为后台运行jenkins  

在此背景下,java进程因各种原因导致进程被kill。或者主动结束进程忘记开启。程序不会自动启动起来。
可以考虑将其做成systemd服务,当进程挂掉之后会自动启动起来

1.环境介绍(目录结构)

### 实验环境为一台机器运行多个jar包或者war包,且包存放在/opt/sdk目录下。且有启动和关闭脚本,logs日志目录
╭─◆root@ localhhost opt/sdk
╰─># ll
total 335684
-rw-r--r-- 1 www www 34698758 Mar 1 18:08 DibDirector.jar
-rw-r--r-- 1 www www 44491920 Mar 1 12:29 DibFinance.jar
-rw-r--r-- 1 www www 34686621 Mar 1 12:28 DibGovernance.jar
-rw-r--r-- 1 www www 49526812 Nov 6 20:31 DibManage.jar
-rw-r--r-- 1 www www 74093277 Nov 6 20:29 DibResource.jar
-rw-r--r-- 1 www www 23007795 Nov 5 17:14 DibSdk.jar
-rw-rw-r-- 1 www www 34484128 Mar 18 23:08 DibShares.jar
-rw-r--r-- 1 www www 48724992 Mar 1 12:28 DibSign.jar
drwxrwxr-x 2 www www 168 Mar 22 09:33 logs/
-rwxrwxr-x 1 www www 219 Mar 18 23:09 start.sh*
-rwxrwxr-x 1 www www 89 Nov 6 13:44 stop.sh*

2.启动脚本通过传递的第一个参数决定启动哪一个jar包

╰─># cat start.sh
#!/bin/bash
export JAVA_HOME=/opt/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
CMD_PATH="/opt/sdk"
sdk=$1
#cd $CMD_PATH
java -jar ${CMD_PATH}/${sdk}.jar > ${CMD_PATH}/logs/${sdk}.log &
echo $! > $CMD_PATH/logs/${sdk}.pid

3.关闭脚本通过传递的第一个参数关闭某一个jar程序

╰─># cat stop.sh
#!/bin/bash
CMD_PATH="/opt/sdk"
sdk=$1
PID=$(cat $CMD_PATH/logs/${sdk}.pid)
kill -9 $PID

4.此处以DibDirector.jar为例:新建DibDirector.service文件

╰─># cat /etc/systemd/system/DibDirector.service
# Systemd unit file for tomcat
[Unit]
Description=Dibcn SDK application
After=syslog.target network.target [Service]
Type=forking Environment=JAVA_HOME=/opt/local/jdk
ExecStart=/opt/sdk/start.sh DibDirector
ExecStop=/opt/sdk/stop.sh DibDirector
PrivateTmp=true User=www
Group=www
UMask=0007
RestartSec=5
Restart=always [Install]
WantedBy=multi-user.target

5.将其开机设置为开机启动

╰─># systemctl enable DibDirector.service

6.备注

1.启动和关闭脚本必须赋予执行权限
2.例子用户权限全部为www用户,即为www用户启动服务
3.不同情况可根据此笔记适当修改,即可使用

centos7下将java -jar命令运行一个项目做成systemd服务的更多相关文章

  1. java -jar命令运行jar包时指定外部依赖jar包 linxux or windows

    前尘回顾: setup.bat [chenquan@hostuser tartest]$ cat ../setup.sh javac -encoding UTF-8 -Djava.ext.dirs=. ...

  2. 使用 "java -jar"命令启动jar包时报不支持的jdk版本异常

    在使用java -jar 命令启动一个jar包的时候,提示版本不支持: [root@hadoop01 eureka-server-master]# java -jar xuebusi-eureka-s ...

  3. -Xbootclasspath参数、java -jar参数运行应用时classpath的设置方法

    当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误.实际上 ...

  4. centos7下Maven Java selenium3环境搭建

    centos7下Maven Java selenium3环境搭建 一.Jdk安装 我这里用的是open-jdk. [adawang@localhost src]$ sudo yum search op ...

  5. linux 下检查java jar包 程序是否正常 shell

    linux 下检查java jar包 程序是否正常 shell http://injavawetrust.iteye.com BATCH_SERVER="batch.jar" NR ...

  6. linux 下启动java jar包 shell

    linux 下启动java jar包 shell #!/bin/sh JAVA_HOME=/usr/local/jdk1.6.0_34/bin/javaJAVA_OPTS="-Xmx256m ...

  7. linux 下停止java jar包 shell

    linux 下停止java jar包 shell http://injavawetrust.iteye.com #!/bin/sh APP_HOME=/home/ap/injavawetrust/ba ...

  8. 【MIT6.828】centos7下使用Qemu搭建xv6运行环境

    title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...

  9. Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行

    段落引用> 由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctr ...

随机推荐

  1. [TJOI2013]攻击装置

    题目 癌我竟然会做 发现我们要求的是一个最大独立集问题 发现一个格子和能攻击到的格子的奇偶性和它都不同,于是我们就可以按照\(i+j\)的奇偶性把整张图分成两个部分 两个部分之间没有连边 于是二分图最 ...

  2. SpringBoot实战(五)之Thymeleaf

    Thymeleaf同jsp.volocity.freemarker等共同的职能是MVC模式中的视图展示层,即View. 当然了,SpringBoot中也可以用jsp,不过不推荐这种用法,比较推崇的就是 ...

  3. 【Linuc-CentOS 】通过yum安装 指定版本的nodejs

    原 [Linuc-CentOS ]通过yum安装 指定版本的nodejs 2018年06月21日 06:56:32 黑夜的风 阅读数:884    版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  4. 推荐一个配置linux服务的网站

    该网站的各种linux服务的配置都是基于CentOS系统的 基本上各种linux服务都有了 http://www.server-world.info/en/

  5. AFSoundManager

    iOS audio playing (both local and streaming) and recording made easy through a complete and block-dr ...

  6. Java单例模式几种实现方式

    在平时的工作.学员的学习以及面试过程中,单例模式作为一种常用的设计模式,会经常被面试官问到,甚至笔试会要求学员现场默写,下面将会就单例模式的实现思路和几种常见的实现方式进行简单的分享. 单例模式,是一 ...

  7. SQL循环插入批量数据

    declare @i intdeclare @qid int set @i=1set @qid=100 while @i<50000begininsert into Order(orderid, ...

  8. 今天在Qt子界面中的Button,转到槽转不过去,报错Qt The class containing 'Ui::MainWindow' could not be found in...

    在网上查了原因,因为我在修改button的名字时,没选中button,选中了子界面对话框Dialog,然后修改了名字,又没有改回去,所以button转到槽报错. 参考网站: https://zhida ...

  9. 19-3-8Python中编码的进阶、文件操作初识、深浅copy

    编码的进阶 ASCII:英文字母,数字,特殊符号,——>  二进制的对应关系 Str: 1个字符——> 1个字节 Unicode:万国码:世界上所有的文字与二进制的对应关系 1个字符——& ...

  10. $.ajax(),$.get(),$.post()的区别,以及一些参数注意规则

    $.ajax()方法和$.get(),$.post()方法的对比 $.ajax()方法是最完整的写法,可以完成所有的ajax请求(包含get类型和post类型) $.get()和$.post()都是简 ...