약 15개의 서비스로 구성된 시스템이 있습니다. 상호 의존성이 없으며(즉, 시작하는 데 다른 서비스가 필요한 서비스가 없음) 시작이 완료되면 systemd에 알립니다(예 Type=notify
:).
문제는 동시에 시작하면 시스템이 과부하되고 시스템 시간 초과로 인해 프로세스가 종료된다는 것입니다.
내가 원하는 것은 서비스가 특별한 순서 없이 차례로 시작되도록 서비스를 "그룹화"하는 것입니다. 시스템 서비스 파일을 통해 이를 달성할 수 있습니까?
그런데: 이것은 내 서비스 파일의 템플릿입니다.
[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
서비스를 대상으로 그룹화하여 사용 Requires
하고 After
종속성을 추가할 수 있습니다 Before
. 이러한 서비스는 상호 배타적이며 systemd에 알림도 제공한다고 언급했으므로 실행하려는 순서에 따라 각 서비스에 대해 After를 추가하면 됩니다.
시스템을 최대한 활용하려면 일부 서비스를 병렬로 실행하여 CPU 대역폭을 완전히 활용하는 것을 고려할 수 있습니다.
시스템화된 키워드를 읽을 수 있습니다.여기