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

Остановить / отложить cron при запуске экземпляра EC2

Мы выполняем набор заданий cron на экземпляре EC2. У нас есть два экземпляра A и B в нашем развертывании. У A и B есть задания Cron, которые запускаются при запуске. Мы хотим отключить cron на B при запуске до тех пор, пока мы не остановим сервер A, и наоборот, когда мы запускаем A.

Можно ли как-нибудь это автоматизировать? Можем ли мы использовать для этого данные пользователя?

По сути, вы хотите запускать свои задания только один раз, либо на A, либо на B, но не на обоих, верно?

Вам понадобится какой-то механизм блокировки / семафора, выбор «cron master» или что-то в этом роде.

Один из способов, который я делал в прошлом, - это иметь События создан Правило AWS CloudWatch каждые X минут отправлять эти события на Очередь SQS и все серверы в кластере, то есть A и B в вашем случае, прослушивают очередь, и по характеру очереди только один выбирает событие и обрабатывает его.

Поэтому вместо того, чтобы иметь внутреннее задание cron на каждом сервере и пытаться синхронизировать их, используйте cron похож на работу сервис вне серверов и запускает задания обработки через очередь SQS. В простых случаях, подобных вашему, это должно работать очень хорошо.

Надеюсь, это поможет :)