Systemd 是一个现代软件套件,它在 Linux 系统上提供多种组件,包括系统和服务管理器。它与 SysV 和 LSB 初始化脚本兼容,并可作为 sysvinit 的替代品。

Systemd 服务在单元文件中定义(此处的单元表示服务和系统资源,例如设备、套接字、挂载点等)。自定义服务单元文件应存储在 /usr/lib/systemd/system/ 目录中,并且以”.service”作为文件扩展名。例如,自定义的 test-app 服务会使用 /usr/lib/systemd/system/test-app.service 单元文件。

单元文件是纯文本 ini 样式文件,通常包含三个公共部分。第一部分通常是单元部分(Unit),它携带有关单元的通用信息,该信息不依赖于单元的类型;第二部分是单位类型部分,对于服务来说,它是Service部分;最后一部分是安装部分(Install),其中包含设备的安装信息。

在本教程中,将展示如何在 Linux 中创建新的 systemd 服务并使用 systemctl 命令管理该服务。

1] 创建自定义 Systemd 文件

要将应用程序或程序脚本作为 systemd 下的服务运行,可以按如下方式创建新的 systemd 服务。

首先在 /etc/systemd/system/ 目录下创建一个名为 test-app.service 的服务单元文件(需要注意的是,此时会将 test-app 替换为服务或应用程序的实际名称):

# vi /usr/lib/systemd/system/test-app.service

以下是一个用于启动 godoc WEB页面的服务:

[Unit]
Description=The Godoc HTTP  server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=root
Group=root
WorkingDirectory=/usr/local/go/bin/
Environment="PATH=/usr/local/go/bin/godoc"
ExecStart=/usr/local/go/bin/godoc -play  -http=127.0.0.1:65000
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target

我们对以上指令作简单说明:

  • Description:是服务是简要说明,会在启动服务时提示启动了服务描述
  • After:定义服务的启动关系,本例中,服务会在 syslog、network 等服务完成后才会被激活
  • User:定义启动服务时所使用的用户
  • Group:定义启动服务时所使用的属组
  • WorkingDirectory:定义可执行进程的工作目录
  • Environment:为工作进程设置对应的环境变量
  • ExecStart:定义服务启动时执行的命令及对应的参数
  • ExecReload:用于定义要执行的命令以触发服务中的配置重新加载
  • WantedBy:当使用 systemctl enable 启用 test-app.service 单元时,可以在每个列出的单元(在本例中为 multi-user.target)的 .wants/ 或 .requires/ 目录中创建符号链接 命令

对于其他单元文件参数的设置,可以参考 >>官方文档<< 进行深入了解。

将单元文件保存后,可以执行如下命令使新创建的 Systemd 服务生效:

#systemctl daemon-reload command

2] Linux 系统管理 Systemd 服务

启动和查看服务状态可以使用如下命令:

# systemctl start test-app.service
# systemctl status test-app.service

图.1 启动和查看 systemd 服务状态

停止或重新启动服务,使用如下命令:

# systemctl stop test-app.service
# systemctl restart test-app.service

如果想要将服务设置为开机自动启动或停止开机自动启动,使用如下命令即可:

# systemctl enable test-app.service
# systemctl is-enabled test-app.service
# systemctl disable test-app.service

图.2 添加或删除开机服务自动启动

需要了解更多有关于管理 systemd 服务的细节,可以使用如下命令了解详细信息:

# man systemctl

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注