システムワンショットは一度だけ実行する必要があります。

システムワンショットは一度だけ実行する必要があります。

環境ファイルを生成する必要があるいくつかのシステムサービスがあります。この環境ファイルを生成するシェルスクリプトがありますが、環境ファイルが必要なため今後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=ディレクティブはファイルが存在することを確認します。

おすすめ記事