龙空技术网

Linux中如何让程序便捷启动和开机自启

但求无Bug 146

前言:

而今我们对“linux指定用户启动程序”大致比较珍视,朋友们都需要分析一些“linux指定用户启动程序”的相关内容。那么小编同时在网上收集了一些关于“linux指定用户启动程序””的相关文章,希望姐妹们能喜欢,看官们一起来了解一下吧!

对于非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 $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDKillMode=process[Install]# 表示该服务所属的targetWantedBy=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

到此,如何自定义系统服务就已经介绍完毕,希望对大家有所帮助。

标签: #linux指定用户启动程序