У меня запущены рубиновые демоны. Время от времени мы случайно запускаем второй его экземпляр, что вызывает состояние гонки.
Могу ли я использовать Monit, чтобы определить, запущено ли несколько экземпляров my_ruby_daemon? А если так убейте лишний экземпляр?
Я не знаю, сможешь ли ты сделать это с monit
, но мне кажется, что Неправильное решение который может вызвать собственные проблемы (особенно если плохие вещи произойдут, если вы убьете "неправильного" демона (?)).
В Правильное решение - заставить вашего демона создать и проверить блокировку (файлы PID отлично подходят для этого - если mydaemon.pid
существует и PID в нем жив, откажитесь от запуска демона).
Доступно несколько гемов / библиотек / и т. Д. Файлов блокировки ruby (как этот).
Если об изменении демона не может быть и речи, почти каждая система Unix поставляется с lockfile
команда или что-то подобное - оберните демон в сценарий оболочки, который создает / проверяет блокировку перед попыткой запуска.
Помогает, если вы поместите файл блокировки куда-нибудь, который очищается при перезагрузке (/tmp
, /var/run
и т. д.), чтобы в случае сбоя системы демон перезапустился при запуске сценария инициализации.