現在の状況
私は Linux サーバー (Arch) を実行しています。次のように実行されるサーバー アプリケーションがあります。
run_server filename --port=xxxx
私は systemd サービス ファイルを作成しました。各ファイルは、特定のポートの特定のファイルに対してプロセスを存続させます。新しいファイルを提供する場合は、systemd サービス ファイルをコピーし、編集し、新しいポートを指定して、新しいサービスを有効化/開始します。
ファイルはチームによって追加および削除されることが多いため、手作業が多くなります。
リクエスト
ファイルのディレクトリがある場合
directory/firstfile
directory/secondfile
....
ファイルごとに 1 つのプロセスを維持したい:
run_server firstfile --port=9001
run_server secondfile --port=9002
...
ディレクトリからファイルが削除されると、プロセスは停止します。ディレクトリにファイルが追加されると、新しいプロセスが開始されます。
どうすればこれを実現できるでしょうか?
答え1
わかりました。2 人のコメント者のアドバイスを組み合わせて採用しました。
systemd テンプレートユニットファイル ( )を作成しました
/etc/systemd/system/[email protected]
[Service] Type=simple ExecStart=/../run_server %i ...
/etc/systemd/system/sync_server_units.path
ディレクトリを監視するsystemdパスサービス( )を作成する[Path] PathModified=/path/to/directory ...
/etc/systemd/system/sync_server_units.service
これにより、単純な run_once である( ) が開始されます。[Service] Type=oneshot ExecStart=/../sync_server_units
sync_server_units
最後に、ディレクトリの内容を の出力と比較しsystemctl list-units --all 'run_server@*'
、必要に応じてテンプレート化されたサービスを有効化/開始/停止/無効化するスクリプト ( ) があります。
今のところうまくいっています!