Я запускаю Linux-сервер (Arch). У меня есть серверное приложение, которое выполняется так:
run_server filename --port=xxxx
Я написал служебные файлы systemd. Каждый поддерживает процессы для определенного файла на определенном порту. Когда я хочу обработать новый файл, я копирую служебный файл systemd; отредактируйте его; дайте ему новый порт; и включить / запустить новую службу.
Это большая ручная работа, потому что файлы часто добавляются и удаляются группой людей.
Если у меня есть каталог файлов
directory/firstfile
directory/secondfile
....
Я хочу поддерживать один процесс для каждого файла:
run_server firstfile --port=9001
run_server secondfile --port=9002
...
Когда файл удаляется из каталога, процесс должен остановиться. Когда файл добавляется в каталог, должен запускаться новый процесс.
Как я могу этого добиться?
Хорошо, я использовал комбинацию советов двух комментаторов.
Создан шаблонный файл модуля systemd (/etc/systemd/system/run_server@.service
)
[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@*'
, и включает / запускает / останавливает / отключает шаблонную службу по мере необходимости.
Пока работает хорошо!