現在的情況
我正在運行 Linux 伺服器(Arch)。我有一個伺服器應用程序,其執行方式如下:
run_server filename --port=xxxx
我已經寫了systemd服務文件。每個進程都為特定連接埠上的特定檔案保持進程活動狀態。當我想要提供一個新文件時,我會複製 systemd 服務文件;編輯它;給它一個新的連接埠;並啟用/啟動新服務。
這是大量的手動工作,因為文件通常是由一群人添加和刪除的。
要求
如果我有一個檔案目錄
directory/firstfile
directory/secondfile
....
我想為每個文件保留一個進程:
run_server firstfile --port=9001
run_server secondfile --port=9002
...
當檔案從目錄中刪除時,該過程應該停止。當檔案新增到目錄時,應該啟動一個新進程。
我怎樣才能實現這個目標?
答案1
好吧,我綜合了兩位評論者的建議。
建立了一個 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@*'
,並根據需要啟用/啟動/停止/停用模板化服務。
到目前為止效果很好!