现在的情况
我正在运行一个 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 ...
创建 systemd 路径服务 (
/etc/systemd/system/sync_server_units.path
),用于监控目录[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@*'
,并根据需要启用/启动/停止/禁用模板服务。
到目前为止效果很好!