為目錄中的每個檔案保持伺服器處於活動狀態

為目錄中的每個檔案保持伺服器處於活動狀態

現在的情況

我正在運行 Linux 伺服器(Arch)。我有一個伺服器應用程序,其執行方式如下:

run_server filename --port=xxxx

我已經寫了systemd服務文件。每個進程都為特定連接埠上的特定檔案保持進程活動狀態。當我想要提供一個新文件時,我會複製 systemd 服務文件;編輯它;給它一個新的連接埠;並啟用/啟動新服務。

這是大量的手動工作,因為文件通常是由一群人添加和刪除的。

要求

如果我有一個檔案目錄

directory/firstfile
directory/secondfile
....

我想為每個文件保留一個進程:

run_server firstfile --port=9001
run_server secondfile --port=9002
...

當檔案從目錄中刪除時,該過程應該停止。當檔案新增到目錄時,應該啟動一個新進程。

我怎樣才能實現這個目標?

答案1

好吧,我綜合了兩位評論者的建議。

  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@*',並根據需要啟用/啟動/停止/停用模板化服務。

到目前為止效果很好!

相關內容