搜索

1.7. 创建自定义单元文件

download PDF

从头开始创建单元文件有多种用例:您可以运行自定义守护进程,创建某些现有服务的第二个实例 ,如使用 sshd 服务的第二个实例来创建自定义单元文件

另一方面,如果您只想修改或扩展现有单元的行为,请使用 修改现有单元文件 中的说明。

步骤

  1. 要创建自定义服务,请准备具有服务的可执行文件。该文件可以包含自定义创建的脚本,也可以是软件供应商提供的可执行文件。如果需要,准备 PID 文件来保存自定义服务主要进程的恒定 PID。您还可以包含环境文件来存储服务的 shell 变量。确保源脚本是可执行的(通过执行 chmod a+x)且不是交互的。
  2. /etc/systemd/system/ 目录中创建一个单元文件,并确定它有正确的文件权限。以 root 用户身份执行:

    # touch /etc/systemd/system/<name>.service
    
    # chmod 664 /etc/systemd/system/<name>.service

    <name> 替换为您要创建的服务的名称。请注意,该文件不需要是可执行的。

  3. 打开创建的 <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 指出服务应在其下启动的目标。将这些目标视为旧的运行级别概念的替代品。
  4. 通知 systemd 存在一个新的 <name>.service 文件:

    # systemctl daemon-reload
    
    # systemctl start <name>.service
    警告

    在创建新单元文件或修改现有单元文件后,总是执行 systemctl daemon-reload 命令。否则,systemctl startsystemctl enable 命令可能会因为 systemd 的状态和磁盘上实际的服务单元文件不匹配而失败。请注意,对于有大量单元的系统来说,这需要很长时间,因为每个单元的状态必须在重新载入的过程中被序列化,然后再进行反序列化。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.