为目录中的每个文件保持一个服务器活动

为目录中的每个文件保持一个服务器活动

现在的情况

我正在运行一个 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. 创建 systemd 路径服务 ( /etc/systemd/system/sync_server_units.path),用于监控目录

    [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@*',并根据需要启用/启动/停止/禁用模板服务。

到目前为止效果很好!

相关内容