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
参数创建必要的符号链接,而启动服务则会立即启动它。