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

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

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

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

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

решение1

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

* * * * * <user> <command>

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

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

решение2

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

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

решение3

Именно это и предполагается для куклы и ее друзей.

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

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

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

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

решение4

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

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

Связанный контент