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

Динамический файл crontab?

Можно ли заставить cron получать инструкции из вывода сценария оболочки вместо чтения статического файла?

Я пытаюсь управлять crontab на нескольких машинах, и поддерживать отдельные файлы crontab для каждой машины - это рутинная работа. Я бы хотел, чтобы cron вместо этого запускал сценарий оболочки, который печатает строки crontab для каждого задания в зависимости от того, назначен ли данный компьютер этому заданию. Я могу это сделать?

P.S. - Я видел, как некоторые предлагали Puppet / Chef / и т. Д. для этой цели, но я думаю, что это излишек для решения только этой одной проблемы.

Я думаю, что самый простой способ сделать это в большинстве дистрибутивов - использовать инструменты автоматического развертывания, такие как Puppet / Chef, а также каталог /etc/cron.d. Вы можете разместить файлы crontab в этом каталоге, за исключением того, что они используют следующий формат, а не обычный:

* * * * * <user> <command>

Где находится пользователь, который будет запускать cron.

Вы, кажется, думаете, что Puppet излишни (это не так), но часть каталога применима и к любому другому решению.

Да, конечно, ты можешь это сделать. Просто настройте любой сценарий, который вам нужен для вывода crontab, и отправьте его на целевые серверы.

Там статическое задание cron может специально прочитать эти crontab для выполнения из любого удобного места.

Это как раз то, что предназначено для марионетки и друзей.

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

Внешний сценарий будет на кукловоде. В одном месте. Для всех машин.

Если достаточно проблем, чтобы рассмотреть возможность использования внешнего сценария, я рекомендую puppet. Шеф-повар наверняка может сделать нечто подобное.

Я начал с марионетки, чтобы управлять ~/.ssh/authorized_keys на нескольких машинах, что является аналогичной «маленькой» проблемой.

Популярным приемом является создание записи crontab, которая обновляет весь crontab. Это будет работать нормально, пока ваш сценарий оболочки никогда не передает неверные данные в crontab.

Однако я предлагаю другой подход, которым будет проще управлять: иметь статическую запись crontab, которая часто запускает скрипт. Сделайте так, чтобы сценарий выполнял всю тяжелую работу по выяснению, когда пора что-то запускать. Таким образом, вы по-прежнему можете использовать crontab как обычный crontab, не сообщая скрипту обо всем, что может выполняться на каждой машине.