ディレクトリ内の各ファイルごとにサーバーを稼働させる

ディレクトリ内の各ファイルごとにサーバーを稼働させる

現在の状況

私は 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 人のコメント者のアドバイスを組み合わせて採用しました。

  1. systemd テンプレートユニットファイル ( )を作成しました/etc/systemd/system/[email protected]

    [Service]
    Type=simple
    ExecStart=/../run_server %i
    ...
    
  2. /etc/systemd/system/sync_server_units.pathディレクトリを監視するsystemdパスサービス( )を作成する

    [Path]
    PathModified=/path/to/directory
    ...
    
  3. /etc/systemd/system/sync_server_units.serviceこれにより、単純な run_once である( ) が開始されます。

    [Service]
    Type=oneshot
    ExecStart=/../sync_server_units
    
  4. sync_server_units最後に、ディレクトリの内容を の出力と比較しsystemctl list-units --all 'run_server@*'、必要に応じてテンプレート化されたサービスを有効化/開始/停止/無効化するスクリプト ( ) があります。

今のところうまくいっています!

関連情報