前言

这篇笔记记录了如何将可执行文件注册为系统服务,以便使用systemctl执行和管理。假设文件的路径为/usr/local/test

操作

要在Linux系统中将一个二进制可执行文件注册为服务,通常可以使用 systemd 系统和服务管理器。systemd 是现代Linux发行版中广泛使用的初始化系统和服务管理工具。

1. 创建 systemd 服务单元文件

首先,你需要创建一个 systemd 服务单元文件,该文件描述了如何启动、停止和服务的行为。

创建服务单元文件

  1. 创建服务单元文件:

    • /etc/systemd/system 目录下创建一个新的服务单元文件,例如 test.service
    1
    sudo nano /etc/systemd/system/test.service
  2. 编辑服务单元文件:

    • 在文件中添加以下内容:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Test Service
    After=network.target

    [Service]
    ExecStart=/usr/local/test/test
    WorkingDirectory=/usr/local/test
    User=<username>
    Group=<groupname>
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
    • 解释配置项:

      • [Unit] 部分描述了服务的依赖关系和描述信息。
      • [Service] 部分描述了服务的实际启动命令和其他运行参数。
        • ExecStart 指定了服务启动时执行的命令路径。
        • WorkingDirectory 指定了服务的工作目录。
        • UserGroup 指定了服务运行时的用户和组。
        • Restart 指定了服务在异常退出后的重启策略。
      • [Install] 部分描述了服务的启动级别和依赖关系。
    • 替换 <username><groupname>:

      • <username> 替换为你希望服务运行的用户名。
      • <groupname> 替换为你希望服务运行的组名。

2. 重新加载 systemd 配置

创建完服务单元文件后,需要重新加载 systemd 配置以使其生效。

1
sudo systemctl daemon-reload

3. 启动、启用和管理服务

  1. 启动服务:

    • 使用 systemctl start 命令启动服务:
    1
    sudo systemctl start test.service
  2. 启用服务:

    • 使用 systemctl enable 命令使服务在系统启动时自动启动:
    1
    sudo systemctl enable test.service
  3. 检查服务状态:

    • 使用 systemctl status 命令检查服务的状态:
    1
    sudo systemctl status test.service
  4. 停止服务:

    • 使用 systemctl stop 命令停止服务:
    1
    sudo systemctl stop test.service
  5. 禁用服务:

    • 使用 systemctl disable 命令禁用服务,使其不再在系统启动时自动启动:
    1
    sudo systemctl disable test.service

4. 验证服务

  1. 查看服务日志:

    • 使用 journalctl 命令查看服务的日志:
    1
    sudo journalctl -u test.service

    这将显示服务的日志,可以帮助你诊断问题。

示例

假设你有一个名为 test 的二进制可执行文件位于 /usr/local/test 目录下,你可以按照以下步骤进行:

  1. 创建服务单元文件:

    1
    sudo nano /etc/systemd/system/test.service
  2. 编辑服务单元文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Test Service
    After=network.target

    [Service]
    ExecStart=/usr/local/test/test
    WorkingDirectory=/usr/local/test
    User=yourusername
    Group=yourgroupname
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
    • yourusername 替换为你希望服务运行的用户名。
    • yourgroupname 替换为你希望服务运行的组名。
  3. 重新加载 systemd 配置:

    1
    sudo systemctl daemon-reload
  4. 启动服务:

    1
    sudo systemctl start test.service
  5. 启用服务:

    1
    sudo systemctl enable test.service
  6. 检查服务状态:

    1
    sudo systemctl status test.service

通过上述步骤,你可以将一个二进制可执行文件注册为Linux系统的服务,并管理其启动、停止和其他行为。