環境ファイルを生成する必要があるいくつかのシステムサービスがあります。この環境ファイルを生成するシェルスクリプトがありますが、環境ファイルが必要なため今後Exec... コマンドを実行するには、ExecStartPre=generate_env_file.sh を使用できません。そのため、スクリプトを一度実行するために別のサービス(generate_env_file.service)を設定しました。
[Service]
Type=oneshot
ExecStartPre=/usr/bin/touch /path/to/config.ini
ExecStart=/path/to/generate_env_file.sh
以下を含む他のサービスファイルがいくつかあります。
[Unit]
Requires=generate_env_file.service
After=generate_env_file.service
2つ以上の依存サービス(generate_env_file.serviceが必要)が並列に実行されないようにし、並列に実行される2つのgenerate_env_file.servicesを生成する方法は?
RemainAfterExit = trueまたはStartLimitIntervalSec =とStartLimitBurst =を使用して一度に1つのコピーのみを実行することを検討しましたが、これを行う最善の方法はわかりません。
ベストアンサー1
RemainAfterExit=true
行く道です。この場合、Systemd はサービスを開始し、Systemd はサービスが開始されアクティブであると考えます。ただし、これには実行されたユースケースは含まれませんsystemctl restart generate_env_file.service
。この場合、systemd はサービスを再実行します。この問題を解決するには、実行中のファイルシステムにタグファイルを作成してExecStartPost=
追加できます。ConditionPathExists=
ディレクティブはファイルが存在することを確認します。