Я пытаюсь добиться того, чтобы несколько экземпляров одного и того же приложения работали одновременно, но только один из них запускал cron, заблокировав его в базе данных Postgres.
Мое решение до сих пор:
- Запуск cron во всех экземплярах.
- Вставка строки в таблицу cron_lock с уникальным идентификатором для cron.
- Если у меня возникла ошибка при выполнении запроса на вставку, это, скорее всего, связано с тем, что строка уже существует (идентификатор cron является первичным ключом таблицы). Если это так, я ничего не делаю и выхожу.
- Если при выполнении запроса на вставку у меня не возникнет ошибка, то экземпляр приложения запустит процесс cron.
- В конце моего процесса я удаляю строку с уникальным идентификатором.
Это решение работает, но я не уверен, существует ли другой механизм блокировки с Postgres, в частности тот, который не будет выполнять запросы, которые создают ошибки.