Systemd:在没有特定依赖关系的情况下逐个启动大量服务

Systemd:在没有特定依赖关系的情况下逐个启动大量服务

我有一个由大约 15 个服务组成的系统。它们没有相互依赖性(即没有服务需要另一个服务来启动),并且它们在启动完成时通知 systemd(即Type=notify)。

问题是,如果我同时启动它们,我的系统就会过载,并且进程会由于 systemd 超时而被终止。

我想要做的是将我的服务“分组”,以便它们一个接一个地启动,没有特定的顺序。这可以通过 systemd 服务文件实现吗?

顺便说一句:这是我的服务文件的模板:

[Unit]
Description=Template service file
After=network.target

[Service]
Type=notify

User=1000
Group=1000

# Set the working directory and the binary to start
WorkingDirectory=/home/user/
ExecStart=/path/to/some/process

# The standard input and output are useless (i.e. unused by the process)
StandardInput=null
StandardOutput=null
# Disable the standard error because all logs are already saved in a specific directory
StandardError=null

# Send SIGTERM then SIGKILL after TimeoutStopSec seconds (default: 2)
KillMode=mixed
TimeoutStopSec=2

# Setup a start timeout
TimeoutStartSec=30

# On abnormal (i.e. non 0 exit code or killed by a signal) termination restart the process after RestartSec seconds (default: 5)
Restart=on-failure
RestartSec=5
# Authorise process restart only 5 times maximum in a 120 seconds interval
StartLimitBurst=5
StartLimitInterval=120

# Set watchdog timeout (default: 10)
WatchdogSec=10
NotifyAccess=main

# Set security options
NoNewPrivileges=yes

[Install]
WantedBy=custom.target

感谢您的帮助

答案1

您可以将服务分组为目标并使用RequiresAfter和添加依赖项Before。由于您提到这些服务是互斥的并且还会通知 systemd,因此您可能只需要根据您希望它们运行的​​顺序为每个服务添加 After 。

如果你想充分利用你的系统,那么你可以考虑并行运行一些服务,以便充分利用CPU带宽。

您可以阅读 systemd 关键字这里

相关内容