systemctl守护自定义程序
创建:2023-12-01 16:25
更新:2023-12-01 16:34

systemd 是 Linux 系统上的一个初始化系统和服务管理器,负责系统的启动、服务的管理等。systemctl 是控制 systemd 系统和服务管理器的命令行工具。一个 systemd 服务文件,通常以 .service 结尾,定义了如何管理和运行服务。

在编写 .service 文件时,可以通过 # 添加注释,注释是不会被 systemd 解析的文本,仅供用户阅读。

WantedBy 参数在 [Install] 部分中指定了一个服务在哪个目标(target)下是被需要的。在 systemd 中,目标是一组服务的集合,类似于传统的运行级别。当启用服务(使用 systemctl enable 命令)时,WantedBy 指定的目标会创建一个符号链接,从而在达到该目标时自动启动服务。

以下是一个 code-server.service 文件的示例:

[Unit]
Description=code server
After=network.target

[Service]
LimitNOFILE=4194304
LimitCORE=infinity
Type=simple
ExecStart=/root/code-server-4.19.1-linux-amd64/bin/code-server
WorkingDirectory=/root/code-server-4.19.1-linux-amd64/bin
KillMode=process
Restart=always
#Restart=on-failure
RestartSec=10
#User=user00
#Environment="GOTRACEBACK=crash"

[Install]
# This service should start when the multi-user target is reached
WantedBy=multi-user.target

在这个例子中:

  • [Unit] 部分定义了服务的元数据和与其他单元的关系。

  • Description 提供了服务的简单描述。

  • After 指定了该服务应该在 network.target 之后启动。

  • [Service] 部分定义了服务的行为。

  • Type=simple 指定了服务的启动类型,这里是最基本的类型,意味着一旦 ExecStart 指定的命令启动,服务就被认为是激活的。

  • ExecStart 指定了启动服务时执行的命令。

  • Restart=on-failure 指定了服务失败时重启策略。

  • RestartSec 定义了服务重启之前的等待时间。

  • [Install] 部分定义了如何安装这个服务,即如何使服务在系统启动时自动启动。

  • WantedBy=multi-user.target 指定了当系统达到 multi-user.target(类似于传统的运行级别3)时,该服务应该被启动。

确保的服务文件符合需求,并且正确地放置在 /etc/systemd/system/ 目录下。之后,可以使用以下命令来启用和启动服务:

sudo cp code-server.service /etc/systemd/system/code-server.service
sudo systemctl daemon-reload
sudo systemctl enable code-server.service
sudo systemctl start code-server.service
sudo systemctl status code-server --no-pager
journalctl -u code-server.service -n 10 -f

启用服务将会根据 WantedBy 参数创建必要的符号链接,而启动服务则会立即启动它。