約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帯域幅を完全に活用することを検討できます。
システム化されたキーワードを読むことができます。ここ