Обновить

Система «работала». Gateway умирал, воскресал, снова умирал, и каждый раз с новым PID. По логам всё было живо, по факту процесс менялся как в калейдоскопе.

А потом я наконец разобрался. В системе жили два launchd-сервиса gateway одновременно: ai.hermes.gateway на уровне машины и ai.hermes.gateway-director на уровне профиля. Оба стартовали с флагом --replace, а это значит: кто стартует последним, убивает предыдущего. Два сервиса играли в перетягивание каната, и PID скакал при каждом старте.

Гонка, которую не видно в обычном логе. Каждый сервис по отдельности честно докладывал «я работаю». Вместе они делали вид, что работают, а на деле постоянно перезапускали друг друга.

Фикс занял две команды: выгрузить лишний сервис и удалить его plist. Осталась ровно одна точка запуска: ai.hermes.gateway-director, в одном процессе Telegram, кроны и email. Второй сервис, serve, живёт своей жизнью и позже превратился в dashboard.

Теперь диагностика гонки занимает минуту: launchctl list | grep hermes должен показать две строки, ps aux | grep "hermes gateway" один процесс. Если PID прыгает, ищи второго игрока.

Правило: если сервис «работает», но ведёт себя странно, проверь, не запущен ли он дважды.

Теги:
0
Комментарии0

Публикации