源作者:但求无Bug
小程序怎么运行对于非yum方式安装的软件来说,系统的时候,我们只能先进入其对应的二进制文件目录下(一般为bin目录),然后运行对应的二进制文件进行启动。这种方式除了比较繁琐外,还无法实现开机自启。为了能够让程序使用systemctl命令便捷启动和开机自启,就需要做一些配置。下面以Elasticsearch为例进行演示。
需要说明的是,如何进行解压和安装Elasticsearch,大家可以自行在网上查找对应教程,我这里就不再过多演示。
编写XXX.service配置文件
首先使用如下命令来进入到/usr/lib/systemd/system目录下:
cd /usr/lib/systemd/system
接着创建elasticsearch.service配置文件,并输入如下所示的内容:
[Unit]
# 描述
Description=elasticsearch
# 表示在network.target启动之后启动
After=network.target
# 表示依赖关系,wants表示弱依赖,此外还有requires表示强依赖(也就是network.target启动失败时,elasticsearch一并退出)
Wants=network.target
[Service]
# 表示启动类型
Type=forking
# 指定启动用户
User=elasticsearch
# 指定启动的用户组
Group=elasticsearch
# 指定变量参数文件, 需要提前创建
EnvironmentFile=/etc/sysconfig/elasticsearch
# 启动时执行的命令
ExecStart=/opt/elasticsearch/elasticsearch-8.2.2/bin/elasticsearch -d
# 重新启动时执行命令
ExecReload=/bin/kill -s -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
KillMode=process
[Install]
# 表示该服务所属的target
WantedBy=multi-user.target
对于自定义的服务端配置单元来说,大致分为三个模块,分别是:控制单元(Unit)、服务本体(Service)和安装服务(Install)
控制单元(Unit)
对于控制单元来说,Description为整个控制单元的描述,可根据需要进行编写;Before/After用于指定启动的顺序,这里的network.target则代表网络,如果是network-online.target则表示一个连通的网络。
服务本体(Service)
对于上面的服务本体来说,Type表示服务类型,其类型有:
Simple:
是默认也是最简单的数据类型,也就是启动的程序主体。
forking:
是标准Unix Daemon使用的启动方式,启动程序后会调用fork函数,将必要的通信信道设置好之后父进程会退出,而子进程则以守护的方式继续运行。
oneshot:
适用于一次性执行的任务或命令,运行完成之后不会存在任何痕迹。也正因为如此,需要使用 RemainAfterExit=yes,也就是说即使没有进程存在,Systemd也认为该服务启动成功了。
dbus:
这个程序启动前需要先获取一个DBUS空间,其需要和BusName一起使用,只有成功获取到DBus空间之后,其所依赖的程序才能正常启动。
而User和Group分别用于指定启动该服务端的特定用户和用户组;ExecStart、ExecReload和ExecStop则分别用于指定服务启动、服务重新加载和服务关闭的命令,需要说明的是命令的启动程序必须使用绝对路径。
对于KillMode来说,有如下几个值:
control-group :
默认值,当前的控制组里面的所有进程都会被杀掉
process:
只杀主进
mixed:
主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
安装服务(Install)
对于安装服务来说,WantedBy表示该服务被哪个用户程序进行装载,一般设置为multi-user.target即可。
加载配置并验证
当配置文件编写完毕后,就需要使用如下命令来重新加载:
systemctl daemon-reload
执行之后并不会有任何内容输出,因此需要使用如下命令来进行验证:
systemctl status elasticsearch
执行结果如下所示:
此时说明自定义服务已经成功,接着执行如下命令来启动elasticsearch服务:
systemctl start elasticsearch
执行后,再次使用systemctl status elasticearch命令查看,结果如下所示:
当然,如果需要开机自启,只需要如下命令:
systemctl enable elasticsearch
到此,如何自定义系统服务就已经介绍完毕,希望对大家有所帮助。