场景

docsify 启动的服务进程经常挂掉,使用 Systemd 设置守护进程,崩溃或退出后自动重启服务。

Systemd和systemctl的关系

Systemd 是 Linux 的一个服务管理器,用于启动、停止、管理和监视 Linux 上的各种服务和守护进程;而 systemctl 是与 Systemd 集成的用于控制和管理服务的命令行工具。

systemctl设置守护进程

  1. 创建 Systemd 服务单元文件:在 /etc/systemd/system/ 目录下创建一个以 .service 结尾的文件,比如 docsify.service

    1
    sudo vim /etc/systemd/system/docsify.service

    添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [Unit]
    # 服务的描述。
    Description=docsify
    After=network.target

    [Service]
    # 服务运行的用户名。
    User=root
    # 启动命令
    ExecStart=/usr/local/bin/docsify serve /root/docs
    # 设置服务在崩溃或退出后自动重启。
    Restart=always

    [Install]
    WantedBy=multi-user.target
  2. 重新加载 Systemd 配置。

    1
    sudo systemctl daemon-reload
  3. 启动服务,服务名称是文件名。

    1
    sudo systemctl start docsify
  4. 验证服务是否成功启动。

    1
    sudo systemctl status docsify

    如果应用正在运行,会看到输出中包含 “active (running)” 的标识。这将显示服务的当前状态,包括是否正在运行、最后一次的活动时间以及是否存在任何错误或警告信息。

  5. 如果希望服务在系统启动时自动启动,可以执行以下命令将其添加到启动项中。

    1
    sudo systemctl enable docsify
  1. 服务名称由文件名决定

    在 Systemd 中,服务的名称是由服务单元文件的文件名决定的,而不是由其中的 Description 字段确定的。文件名应该以 .service 结尾,并且通常会反映服务的名称。

    比如有一个名为 your-service.service 的服务单元文件,那么服务的名称就是 your-service。Systemd 会根据服务单元文件的文件名来识别和操作服务。

    服务单元文件中的 Description 字段是对服务的描述,它用于提供关于服务的简要说明,但它不会直接影响服务的名称或标识。

    所以,服务的名称是由服务单元文件的文件名决定的,而不是由其中的 Description 字段确定的。

查看服务日志

要查看 systemctl 服务的日志,可以使用 journalctl 命令。journalctl 是 CentOS 系统中用于查看系统日志的工具,它可以显示各个服务的日志记录。

查看指定服务的日志:

1
journalctl -u docsify.service

实时查看服务日志:

1
journalctl -u docsify.service -f

参考

https://youwu.today/skill/linux/setup-a-daemon-process-on-linux/