Назад | Перейти на главную страницу

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

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

Я запускаю 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/run_server@.service)

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

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