【Linux】Centos7 的 Systemctl 与 创建系统服务 (shell脚本)

Systemctl

systemctl 命令

# 启动
systemctl start NAME.service
# 停止
systemctl stop NAME.service
# 重启
systemctl restart NAME.service
# 查看状态
systemctl status NAME.service
# 查看所有激活系统服务
systemctl list-units -t service
# 查看所有系统服务
systemctl list-units -t service -a
# 设置开机自启动
systemctl enable NAME.service
# 禁止开机自启动
systemctl disable NAME.service
# 查看服务是否是开机自启动
systemctl list-unit-files –t service
# 查看某服务是否开机自启动
systemctl is-enabled NAME.service

systemctl 状态

loaded:unit配置文件已处理
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性配置
active(waiting):运行中,等待一个事件
inactive:不运行
enable:开机启动
disable:开机不启动
static:开机不启动,但可以被另一个启用的服务激活。

systemctl 运行级别

0 :关机:poweroff.target
1 :单用户模式:rescue.target
2 :默认不启用NFS的多用户:multi-user.target
3 :完全的多用户:multi-user.target
4 :保留:mult-user.target
5 :图形:graphical.target
6 :重启:reboot.target

自建服务
1、服务存放路径

用户级系统服务:/usr/lib/systemd/system
系统级系统服务:/etc/systemd/system

2、编写一个系统服务

创建系统服务文件的三个部分分别是:Unit 、 Service、 Install

Unit:

Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反;
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit即无法激活;
Wants:依赖到的其它units,弱依赖;
Conflicts:定义units间的冲突关系。

Service:

Type:定义影响ExecStart及相关参数功能的unit进程启动类型;simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中;
forking:由ExacStart启动的程序透过spawns延伸出其它子程序来作为此deamon的主要服务。原生父程序在启动结束后就会终止。
oneshot:与simple类似,不过这个程序在完成工作后就结束,不常驻内存;
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作。因此通常也要同时设定BusName=才行;
notify:在启动完成后会发送一个通知消息。还需要配合NotifyAccess来让Systemd接收消息;
idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务。EnvironmentFile:环境配置文件;
ExecStart:指明启动unit要运行命令或脚本的绝对路径;
ExecStartPre:在ExecStart之前运行的绝对路径;
ExecStartPost:在ExecStart之后运行的绝对路径;
ExecStop:指明停止unit要运行的命令或脚本的绝对路径;
Restart:当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动。PrivateTmp:true/false表示是否给服务分配独立的临时空间
Install:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖;
WantedBy:被哪些units所依赖,弱依赖;
Also:安装本服务的时候还要安装别的相关服务。

举例

vim /usr/lib/systemd/system/wxybackend.service

在这里插入图片描述
:wq退出

[Unit]
Description=backend service  
After=docker.service[Service]
Type=forking
ExecStart=/home/project/xxx/syscmd.sh start
ExecReload=/home/project/xxx/syscmd.sh restart
ExecStop=/home/project/xxx/syscmd.sh stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
systemctl daemon-reload 
 systemctl enable wxybackend.service 
 systemctl start wxybackend.service

syscmd.sh脚本内容

#!/bin/sh
# start 启动 stop 停止 restart 重启 status 状态
AppName=xxxx.jar
AppPath=/home/project/xxx
# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms2048m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$AppPath/logs/$AppName.logif [ "$1" = "" ];
thenecho -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"exit 1
fiif [ "$AppName" = "" ];
thenecho -e "\033[0;31m 未输入应用名 \033[0m"exit 1
fifunction start()
{PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`if [ x"$PID" != x"" ]; thenecho "$AppName is running..."else#输出日志nohup java $JVM_OPTS -jar $AppPath/$AppName >> $AppPath/nohup.out 2>&1 & #不输出日志#nohup java $JVM_OPTS -jar $AppPath/$AppName  &echo "Start $AppName success..."#tail -500f nohup.outfi
}function stop()
{echo "Stop $AppName"PID=""query(){PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`}queryif [ x"$PID" != x"" ]; thenkill -TERM $PIDecho "$AppName (pid:$PID) exiting..."while [ x"$PID" != x"" ]dosleep 1querydoneecho "$AppName exited."elseecho "$AppName already stopped."fi
}function restart()
{stopsleep 2start
}function status()
{PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`if [ $PID != 0 ];thenecho "$AppName is running..."elseecho "$AppName is not running..."fi
}case $1 instart)start;;stop)stop;;restart)restart;;status)status;;*)esac
在Linux环境下运行jar文件

方式一:
命令: java -jar xxxx.jar

   特点:当前ssh窗口被锁定,可按ctrl+c打断程序运行,或直接关闭窗口,程序退出。

方式二:
命令:java -jar xxxx.jar &

   特点:&表示在后台运行。当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

方式三:
命令:nohup java -jar xxxx.jar &

   特点:nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

方式四:
命令:nohup java -jar xxxx.jar >/log.file &

   特点:将日志输出到log.file指定的文件内。
>>      输出重定向
2>&1    (2)标准错误输出   (>) 重定向到  (&1)标准输出
2>&1 标准错误输出重定向到标准输出
&       标识进程为后台进程

shell 命令中,几个基本符号及其含义

0 表示stdin标准输入 1 表示stdout标准输出 2 表示stderr标准错误

拓展:

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中

命令改为 nohup java -jar project.jar >> log.out 2>&1 & 完美解决问题,日志追加到 log.out 文件中 ,且线程在后台不挂断运行

报错nohup找不到java
在这里插入图片描述

 看看环境变量 是不是有问题 或者 在sh脚本运行的时候 指定jdk的路径 

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

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

相关文章

PHP高级检索功能的实现以及动态拼接sql

我们学习了解了这么多关于PHP的知识,不知道你们对PHP高级检索功能的实现以及动态拼接sql是否已经完全掌握了呢,如果没有,那就跟随本篇文章一起继续学习吧! PHP高级检索功能的实现以及动态拼接sql。完成的功能有:可以单独根据一个…

华为云hcip核心知识笔记(数据库服务规划)

华为云hcip核心知识笔记(数据库服务规划) 1.云数据接库优势 1.1云数据库优点有: 易用性强:能欧快速部署和运行 高扩展:开放式架构和云计算存储分离 低成本:按需使用,成本更加低廉 2.云数据库r…

微软开测“Moment4”启动包:Win11 23H2要来了

近日, 有用户在Win11最新的7月累积更新中发现,更新文件中已经开始出现了对“Moment4”的引用。 具体来说,在7月累积更新中,微软加入了“Microsoft-Windows-UpdateTargeting-ClientOS-SV2Moment4-EKB”“Microsoft-Windows-23H2Ena…

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了,像之前小编也总结过,但是课程每期都有做一定的更新,也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求,之前课程里面也包含了一些小的分支&#…

音频客观感知MOS对比,对ViSQOL、PESQ、MosNet(神经网络MOS分)和polqa一致性对比和可信度雁阵

原创:转载需附链接: 音频客观感知MOS对比,对ViSQOL、PESQ、MosNet(神经网络MOS分)和polqa一致性对比和可信度雁阵_machine-lv的博客-CSDN博客谢谢! 本文章以标准polqa的mos分为可信前提,验证vis…

MPAndroidChart学习及问题处理

1.添加依赖 项目目录->app->build.gradle dependencies {implementation com.github.PhilJay:MPAndroidChart:v3.0.3 }项目目录->app->setting.gradle dependencyResolutionManagement {repositories {maven { url https://jitpack.io }} }高版本的gradle添加依…

2023年第四届“华数杯”数学建模思路 - 案例:感知机原理剖析及实现

# 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其原理可以看下图: 比如说我们有一个坐标轴(图中的…

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场…

直线模组如何进行精度校准?

直线模组是一种高精度的传动元件,而精度是直线模组的重要指标,在直线模组的使用中,我们应该尽可能的避免直线模组的精度受损,这样才能够有真正的发挥出直线模组的稳定性。 直线模组的精度一般是指重复定位精度和导向精度&#xff…

PyTorch(安装及卸载)

目录 1. 安装 2. 卸载 参考文献 为什么用PyTorch:简单来说,19年之前tensorflow是大哥,19年tensorflow和PyTorch双龙并行,20年之后PyTorch一往无前。宗旨,哪个用的人多用哪个。 1. 安装 1. 先打开Anaconda Prompt&…

uniapp自定义消息语音

需求是后端推送的消息APP要响自定义语音,利用官方插件,总结下整体流程 uniapp后台配置 因为2.0只支持uniapp自己的后台发送消息,所以要自己的后台发送消息只能用1.0 插件地址和代码 插件地址: link let isIos (plus.os.name "iOS&qu…

C++内存管理

目录 一.C中内存区域划分 一.C中内存区域划分 1.栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。 2.内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。 …

手撕SpringBoot的自定义启动器

一. 前言 哈喽,大家好,最近金九银十,又有不少小伙伴私信辉哥,说自己在面试时被问到SpringBoot如何自定义启动器,结果自己不知道该怎么回答。那么今天就手把手地带着大家,去看看在SpringBoot中到底该怎么实…

亚马逊买家账号ip关联怎么处理

对于亚马逊买家账号,同样需要注意IP关联问题。在亚马逊的眼中,如果多个买家账号共享相同的IP地址,可能会被视为潜在的操纵、违规或滥用行为。这种情况可能导致账号受到限制或处罚。 处理亚马逊买家账号IP关联问题,建议采取以下步骤…

生化危机5找不到xlive.dll,要如何修复xlive.dll缺失

有朋友反映说他在玩生化危机5的时候,突然电脑就弹出一个找不到xlive.dll,然后游戏就打不开了,一直都很懵逼,不知道怎么处理这个问题,今天小编就来给大家详细的讲讲,找不到xlive.dll要怎么去修复&#xff01…

危化品行业防雷检测综合解决方案

危化品是指具有毒害、腐蚀、爆炸、燃烧、助燃等性质,能够对人体、设施或者环境造成危害的化学品。危化品的生产、储存、运输、使用等过程中,都存在着遭受雷击引发火灾或者爆炸事故的风险。因此,对危化品场所进行防雷检测,是保障危…

IDEA中修改类头的文档注释信息

IDEA中修改类头的文档注释信息 选择File--Settings--Editor--File and Code Templates--Includes,可以把文档注释写成这种的 /**author: Arbicoralcreate: ${YEAR}-${MONTH}-${DAY} ${TIME}Description: */这样回看就可以很清楚的看到自己创建脚本的时间&#xff…

什么是注意力机制?注意力机制的计算规则

我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的),是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果,正是基于这样的理论&a…

基于 FFlogs API 快速实现的 logs 颜色查询小爬虫

文章目录 找到接口解析响应需要平均颜色和过本次数? 找到接口 首先试了一下爬虫,发现和wow一样官网上有暴露的 API,链接在:FFlogs v1 API 文档链接 通过查询官方提供的 API 接口得知: user_name 角色名字 api_key …

数据结构—栈

栈 栈的概念及结构栈的实现 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out&…