LINUX添加自定义系统服务[Systemd]

前言:

Init进程作为LINUX系统初代初始化进程服务的程序,目前已逐渐被Systemd程序所取代了。就学习成本与易用性上来说,Init方式显然要简单得多。然而,就目前LINUX系统基本都加入Systemd程序来代替Init程序来管理系统初始化进程服务来说,Systemd想必有其特定的优势。而事实上,Systemd程序也确实有其优势,在处理进程依赖、进程控制、故障处理等方面,要比Init方式要好很多。Systemd程序的功能要强很多,伴随而来的是,更高的学习成本与更复杂的配置指令,就配置指令来说,简单看其配置指令解释文件,大概有上百条不同用途的指令,这当中,某些指令还有其特定的配置参数等等。这也是很多习惯了Init方式的用户不喜欢Systemd的原因,尽管Systemd还保留着对Init方式的兼容。

无论如何,Systemd代替Init程序已是大势所趋,我们也只能去适应时代的需求了。所幸的是,尽管Systemd的配置指令非常多及非常复杂,然而作为大多数的用户或管理人员,我们只需要熟悉少量的指令便享受Systemd的强大功能,以下,就是LINUX添加自定义系统服务基础方法,很多时候,这一基础方法便能满足我们的大部分需求了。

 一、相关目录

与SYSTEMD服务相关的目录:

[/etc/systemd/system/]  :常用目录,系统管理员和用户使用;

[/run/systemd/system/]  :运行时配置文件;

[/usr/lib/systemd/system/]  :很多文章提及此目录,但在较新的LINUX系统上未发现,可能被弃用了[未确定];

 二、区块说明及常用配置

以下操作均基于DEBIAN系统,现在本文以“ssh.service”文件为例说明,以下为本文系统上的文件实际情况:

其基本结构分为“[Unit]”、“[Service]”、“[Install]”三个区块。“[Unit]”区块主要任务是决定服务加载前相关条件要求;“[Service]”区块主要是进行对服务加载、加载过程及运行过程的控制;“[Install]”区块相对简单,基本为为配合“systemctl”命令而生成一些系统必须的相关软链接;对于SYSTEMD,实际对还区分为很多种不同类型的单元,具体表现为不同的文件后缀,如:[.socket]、[.mount]、[.service]等,本文仅简单讨论[.service]后缀的单元,虽然是简单介绍,这结合自定义的脚本,这基本上能满足大部人所希望实现的功能了,即使用SYSTEMD对自定义服务实现服务启动、终止、重载、开机启动等。

“[Unit]”区块常用配置项:

“[Service]”区块常用配置项:

“[Install]”区块常用配置项:

三、SYSTEMD守护进程目录

SYSTEMD守护进程是使用“systemctl”命令对服务进行控制的,常用的命令如下:

命令 说明
systemctl start ssh.service 启动指定服务
systemctl stop ssh.service 停止指定服务
systemctl restart ssh.service 重新启动指定服务
systemctl reload ssh.service 重新加载指定服务的配置
systemctl status ssh.service 查看指定服务的运行状态
systemctl daemon-reload 刷新SYSTEMD的配置信息
systemctl enable ssh.service 设定指定服务启用开机自启动
systemctl disable ssh.service 设定指定服务禁用开机自启动
systemctl is-active ssh.service 查询指定服务的活动状态
systemctl list-units --type=service 查询所有已启动的服务

四、尝试自定义服务示例

现在,本文模拟一个情境,系统上有一个名为“v2ray”的可执行文件,可使用命令[/opt/v2ray/v2ray -config /opt/v2ray/KCP_WSTLS.json]提供某一项长期性的网络服务,但这可执行文件基于某种原因,若长期运行可能产生不稳定状况,于是希望该程序可以实现定时自动重新启动保持稳定性;基于以上需求大概可以考虑的有三种方式:1、编写脚本及利用系统上的定时任务功能[/etc/crontab];2、添加基于SYSTEMD守护进程的自定义服务结合系统上的定时任务功能;3、添加基于SYSTEMD守护进程的自定义服务并使用SYSTEMD的[Timer]区块;由于本文未涉及[Timer]区块,本例将以方式2作说明。

步骤一:在[/lib/systemd/system]目录下创建“v2ray.service”文件,并使用“nano”命令进入编辑界面;

步骤二:在[v2ray.service]文件写入如下配置项;参见下面配置,实际上自定义一项服务需要设定的配置项并不多,下述配置只是定义的服务的描述信息、设定启动条件及其基础的依赖,再加上启动命令与重载命令即完成了自定义服务的配置,另外,下述配置为防止一些配置文件缺失,加入了一条配置文件检测项,实际若不需要配置文件检测,仅需要编写六项配置,即可完成一个自定义服务!

步骤三:启用自定义服务并设定开机启动,及服务状态查询;

步骤四:经过上述步骤,自定义服务已经可以开机自启动了,现在本文将利用LINUX的定时任务功能实际服务定时重启;在[/etc/crontab]文件的末尾加入以下代码,下列代码的意思为:每个周一的早上6时整,以“root”用户身份重新启动[v2ray.service]服务;

五、强烈推荐

关于SYSTEMD,功能异常强大与复杂,强列推荐从以下网站获取相关的信息:金步国作品集[ 链接地址 ];本文大量参考了此网站的信息;

网友评论1

发表评论

表情
还能输入210个字

Captcha Code