Red Hat Training
A Red Hat training course is available for RHEL 8
17.6. 创建自定义单元文件
从头开始创建单元文件有几个用例:您可以运行一个自定义的守护进程,创建现有服务的第二个实例,如 如使用 sshd 服务的第二个实例来创建一个自定义单元文件 中所述
另一方面,如果您只想修改或扩展现有单元的行为,请使用 修改单元文件 中的说明。
流程
以下流程描述了创建自定义服务的一般过程:
-
使用自定义服务准备可执行文件。这可以是自定义创建的脚本,也可以是软件供应商提供的可执行文件。如果需要,准备 PID 文件来保存自定义服务主要进程的恒定 PID。也可以包含环境文件来存储该服务的 shell 变量。确保源脚本是可执行的(通过执行
chmod a+x
)且不是交互的。 在
/etc/systemd/system/
目录中创建一个单元文件,并确定它有正确的文件权限。以root
用户身份执行:touch /etc/systemd/system/name.service
chmod 664 /etc/systemd/system/name.service
使用要创建的服务的名称替换 name。请注意,该文件不需要可执行。
打开上一步中创建的
name.service
文件并添加服务配置选项。根据您要创建的服务类型,有多种选项可以使用,请查看 单元文件结构。以下是网络相关服务的单元配置示例:
[Unit] Description=service_description After=network.target [Service] ExecStart=path_to_executable Type=forking PIDFile=path_to_pidfile [Install] WantedBy=default.target
其中:
-
service_description 是一个信息性描述,显示在 journal 日志文件和
systemctl status
命令的输出中。 -
After
设置确保服务仅在网络运行后启动。添加一个空格分隔的其他相关服务或目标的列表。 - path_to_executable 代表到实际可执行服务的路径。
-
Type=forking
用于进行 fork 系统调用的守护进程。该服务的主要进程使用 path_to_pidfile 中指定的 PID 创建。在 重要 [Service] 部分选项中查找其他启动类型。 -
WantedBy
指出服务应在其下启动的目标。将这些目标视为旧的运行级别概念的替代品。
-
service_description 是一个信息性描述,显示在 journal 日志文件和
以
root
用户身份执行以下命令来通知 systemd 是否存在一个新 的name.service
文件:systemctl daemon-reload
systemctl start name.service
警告在创建新单元文件或修改现有单元文件后,总是要运行
systemctl daemon-reload
命令。否则,systemctl start
或systemctl enable
命令可能会因为 systemd 和磁盘上的实际服务单元文件的状态不匹配而失败。请注意,对于有大量单元的系统来说,这需要很长时间,因为每个单元的状态必须在重新载入的过程中被序列化,然后再进行反序列化。