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

Как использовать monit, чтобы убедиться, что запущен только один экземпляр процесса

У меня запущены рубиновые демоны. Время от времени мы случайно запускаем второй его экземпляр, что вызывает состояние гонки.

Могу ли я использовать Monit, чтобы определить, запущено ли несколько экземпляров my_ruby_daemon? А если так убейте лишний экземпляр?

Я не знаю, сможешь ли ты сделать это с monit, но мне кажется, что Неправильное решение который может вызвать собственные проблемы (особенно если плохие вещи произойдут, если вы убьете "неправильного" демона (?)).

В Правильное решение - заставить вашего демона создать и проверить блокировку (файлы PID отлично подходят для этого - если mydaemon.pid существует и PID в нем жив, откажитесь от запуска демона).
Доступно несколько гемов / библиотек / и т. Д. Файлов блокировки ruby ​​(как этот).
Если об изменении демона не может быть и речи, почти каждая система Unix поставляется с lockfile команда или что-то подобное - оберните демон в сценарий оболочки, который создает / проверяет блокировку перед попыткой запуска.

Помогает, если вы поместите файл блокировки куда-нибудь, который очищается при перезагрузке (/tmp, /var/runи т. д.), чтобы в случае сбоя системы демон перезапустился при запуске сценария инициализации.