Как настроить задачу CRON для запуска только один раз на набор экземпляров?

Мы размещаем наш веб-сайт в AWS. В настоящее время у нас есть 3 экземпляра EC2 в одном кластере с использованием балансировщика нагрузки AWS.

На серверах установлены linux, apache, java, mysql и tomcat 6.0.

Мы принимаем решение о том, как настроить выполнение задачи каждый час. Очевидно, что это можно сделать в коде Java, но есть одна проблема.

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

У меня есть несколько идей, как преодолеть это, но я надеялся, что существует лучший, возможно, отраслевой стандарт, как с этим справиться.

Одна из идей состоит в том, чтобы сохранить в БД, которую он уже запускал. Задача увидит, что она уже была запущена сегодня или нет. Но я вижу там ошибки.

Другая идея заключалась в том, чтобы использовать cron, установленный на одном из экземпляров в родной ОС, вне кода в Tomcat. Это будет использовать wget для вызова веб-страницы, которая вызывает java-метод. Поскольку это вызовет только один из экземпляров, он должен запускаться только один раз.

Оба способа кажутся хакерскими и подверженными ошибкам. Есть ли реальный способ сделать это?

5
задан UpHelix 2 November 2011 в 23:39
поделиться