Поддерживать сервер в рабочем состоянии для каждого файла в каталоге

Поддерживать сервер в рабочем состоянии для каждого файла в каталоге

Текущая ситуация

Я использую сервер 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@*'и включает/запускает/останавливает/отключает шаблонную службу по мере необходимости.

Пока все работает хорошо!

Связанный контент