首页 > 系统相关 >(转)【Linux】Centos7 的 Systemctl 与 创建系统服务 (shell脚本)

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

时间:2022-12-07 22:44:26浏览次数:45  
标签:systemctl shell grep service AppName jar Centos7 Systemctl nohup

原文:https://blog.csdn.net/qq_42862247/article/details/127260241

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
systemctl 状态

loaded:unit配置文件已处理
active(running):一次或多次持续处理的运行
active(exited):成功完成一次性配置
active(waiting):运行中,等待一个事件
inactive:不运行
enable:开机启动
disable:开机不启动
static:开机不启动,但可以被另一个启用的服务激活。
1
2
3
4
5
6
7
8
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
2
3
4
5
6
7
自建服务
1、服务存放路径

用户级系统服务:/usr/lib/systemd/system
系统级系统服务:/etc/systemd/system
1
2
2、编写一个系统服务

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

Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反;
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit即无法激活;
Wants:依赖到的其它units,弱依赖;
Conflicts:定义units间的冲突关系。
1
2
3
4
5
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:安装本服务的时候还要安装别的相关服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
举例

vim /usr/lib/systemd/system/wxybackend.service
1
![在这里插入图片描述](/i/ll/?i=8d7f30146ec54dc8b09a7704743465a8.png

: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
1
2
3
4
5
6
7
8
9
10
11
12
13
systemctl daemon-reload
1
systemctl enable wxybackend.service
1
systemctl start wxybackend.service
1
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.log

if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi

if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi

function start()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

if [ x"$PID" != x"" ]; then
echo "$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.out
fi
}

function stop()
{
echo "Stop $AppName"

PID=""
query(){
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
}

query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}

function restart()
{
stop
sleep 2
start
}

function status()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}

case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)

esac

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
在Linux环境下运行jar文件
1
方式一:
命令: java -jar xxxx.jar

特点:当前ssh窗口被锁定,可按ctrl+c打断程序运行,或直接关闭窗口,程序退出。
1
方式二:
命令:java -jar xxxx.jar &

特点:&表示在后台运行。当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。
1
方式三:
命令:nohup java -jar xxxx.jar &

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

特点:将日志输出到log.file指定的文件内。
1
>> 输出重定向
2>&1 (2)标准错误输出 (>) 重定向到 (&1)标准输出
2>&1 标准错误输出重定向到标准输出
& 标识进程为后台进程
1
2
3
4
shell 命令中,几个基本符号及其含义

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

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

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


看看环境变量 是不是有问题 或者 在sh脚本运行的时候 指定jdk的路径
————————————————
版权声明:本文为CSDN博主「想要一百块」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42862247/article/details/127260241

标签:systemctl,shell,grep,service,AppName,jar,Centos7,Systemctl,nohup
From: https://www.cnblogs.com/liujiacai/p/16964788.html

相关文章

  • (转)编写Shell脚本的最佳实践
    原文:https://blog.mythsman.com/post/5d2ab67ff678ba2eb3bd346f/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#--14前言由于工作需要,最近重新开始拾掇......
  • shell脚本分割字符窜
    如何在Bash脚本中分割字符串原创 TIAP TIAP 2022-12-0607:35 发表于山东收录于合集#bash9个#Linux145个TIAP技术分享,经验交流,职业生涯探讨。......
  • shell编程时出现:未预期的符号 `then' 附近有语法错误 或者 : 行 : `then'
    #!/bin/bashcd/var/logsum=0foriin`ls-r*`do       if[-f$i];then       letsum++       echo"文件名:$i"......
  • Centos7 kubeadm安装k8s
    安装环境准备关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld关闭selinuxsed-i's/enforcing/disabled/'/etc/selinux/config关闭swapsed-ri......
  • linux 中 shell 记录程序运行时间
      001、[root@PC1test]#start=`date+%s`##从1970年1月1日00:00:00UTC到目前为止的秒数(时间戳)[root@PC1test]#echo$start1670412402[root@......
  • Jmeter小技能【BeanShell断言、多个相同参数提取、固定定时器、输出执行报告】
    1、BeanShell断言比响应断言更灵活,可通过BeanShell脚本设置Faillure及FailureMessage来执行断言检查,并输出断言失败接口的响应错误内容。//获取响应结果内容Stringre......
  • shell
    shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统shell种类bashLinux标准默认的shell,bash完全兼容shshUnix标准默认的shell......
  • Shell中色彩处理
    一、echo命令结果高亮显示Shell脚本中echo命令显示内容带颜色高亮显示时,需要使用参数-e。命令使用格式1:echo-e"\033[背景颜色;文字颜色m要输出的内容\033[0m"。命令使用格式......
  • Centos7上使用yum安装mysql8.x
    文章目录​​前言​​​​一、官方文档​​​​二、安装步骤​​​​1.安装MySQLYumRepository​​​​2.选择要安装的版本​​​​3.检查rpm的签名​​​​4.安装Mysql​......
  • 在OpenEuler22.09(也适用于CentOS7+)编译安装Python3.9,并与原Python共存-指南
    指南使用操作系统:OpenEuler22.09(网络安装,最小安装,使用默认源)指南使用系统自带Python版本:3.10(高版本,这不是3.1喔)1.安装基本的编译环境yum-yinstallgccgcc-c++......