Skip to content

Latest commit

 

History

History
30 lines (16 loc) · 2.48 KB

File metadata and controls

30 lines (16 loc) · 2.48 KB

TODO

2. Принудительное завершение (SIGKILL) если SIGTERM не помог

Реализовано: stop_bot() делает proc.wait(timeout=5)proc.kill(). Дополнительно добавлен эндпоинт POST /force_kill/{name} с pkill -9 -f <cmd> для уничтожения зависших копий процесса.


1. Авто-перезапуск при падении процесса

Проблема: если управляемое приложение упало само по себе, менеджер этого не замечает и не перезапускает его.

Решение: фоновая задача (asyncio loop через lifespan FastAPI) периодически проверяет proc.poll() для каждого процесса с флагом auto_restart: true в bots.json. Если процесс завершился — перезапускает его через start_bot().


3. Управление приложениями через UI (без ручного редактирования bots.json)

Проблема: добавить, изменить или удалить приложение можно только вручную в bots.json.

Решение: добавить в дашборд форму для добавления нового приложения (name, cwd, cmd, health_url, auto_restart) и кнопку удаления для каждого. При сохранении перезаписывать bots.json. python-multipart уже подключён.


4. Восстановление состояния после перезапуска менеджера

Проблема: если bot_manager перезапустить, он теряет информацию о ранее запущенных процессах — они продолжают работать, но менеджер их не видит и показывает статус "stopped".

Решение: при старте каждого процесса сохранять его PID в файл state.json. При запуске менеджера — читать state.json и для каждого сохранённого PID проверять через psutil.pid_exists(pid) и пересоздавать объект Process через psutil.Process(pid). Добавить psutil в зависимости.