Подтвердить что ты не робот

Как вы создаете рабочие места cron для производства?

Как люди развертывают/управляют версиями cronjobs для производства? Мне более любопытно, что люди используют стандарты/стандарты, чем какое-либо конкретное решение, но я использую git для контроля версий, а cronjob запускает python/django script.

4b9b3361

Ответ 1

Если вы используете Fabric для deploment, вы можете добавить функцию, которая редактирует ваш crontab.

def add_cronjob():
    run('crontab -l > /tmp/crondump')             
    run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump')
    run('crontab /tmp/crondump')

Это добавит работу к вашему crontab (отказ от ответственности: полностью непроверенный и не очень идемпотентный).

  • Сохраните crontab в tempfile.

  • Добавить строку в tmp файл.

  • Напишите crontab назад.

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

Ответ 2

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

Ткань script Я использую выглядит что-то вроде этого (некоторый код отредактирован, например, позаботится о резервных копиях):

def deploy_crontab():
    put('crontab', '/tmp/crontab')
    sudo('crontab < /tmp/crontab')

Ответ 4

Возможно, вы можете использовать что-то вроде CFEngine/Chef для развертывания (он может развернуть все - включая задания cron)

Однако, если вы зададите этот вопрос - возможно, у вас есть много производственных серверов, на которых выполняется большое количество запланированных заданий. Если это так, вам, вероятно, нужен инструмент, который может не только разворачивать задания, но и отслеживать неудачу успеха, позволяет легко просматривать журналы с последнего запуска, запускать статистику, позволяя легко изменять расписание для многих заданий и серверов (из-за запланированного обслуживания...) и т.д.

Я использую коммерческий инструмент под названием "UC4". Я не рекомендую это, поэтому надеюсь, что вы сможете найти лучшую программу, которая может решить ту же проблему. Я просто говорю, что администрирование заданий не заканчивается при их развертывании.

Ответ 5

Есть действительно 3 варианта ручного развертывания crontab, если вы не можете подключить свою систему до системы управления конфигурацией, например cfengine/puppet.

Вы можете просто использовать crontab -u user -e, но вы рискуете, что у кого-то есть ошибка в их копировании/вставке.

Вы также можете скопировать файл в каталог cron, но для этого файла нет синтаксической проверки, а в Linux вы должны запустить touch/var/spool/cron, чтобы crond мог перенести изменения,

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

По моему опыту этот метод - мой любимый ручной способ развертывания crontab.

diff /var/spool/cron/<user> /var/tmp/<user>.new
crontab -u <user> /var/tmp/<user>.new

Я думаю, что метод, о котором я упоминал выше, является лучшим, потому что вы не рискуете ошибками копирования/вставки, которые помогут вам поддерживать согласованность с вашим файлом с контролируемой версией. Он выполняет синтаксическую проверку задач cron внутри файла, и вам не нужно будет выполнять команду touch так, как если бы вы просто скопировали файл.

Ответ 6

Если вы используете Django, посмотрите на систему заданий из django-команд-расширений.

Преимущества в том, что вы можете сохранить свои задания внутри своей структуры проекта, с контролем версий, написать все в Python и настроить crontab только один раз.

Ответ 7

Я использую Buildout для управления моими проектами Django. С помощью Buildout я использую z3c.recipe.usercrontab для установки заданий cron при развертывании или обновлении.

Ответ 8

Наличие вашего проекта под управлением версии, включая ваш crontab.txt, является тем, что я предпочитаю. Затем, Fabric, это так просто:

@task
def crontab():
    run('crontab deployment/crontab.txt')

Это установит содержимое deployment/crontab.txt в crontab пользователя, подключенного к серверу. Если у вас нет полного проекта на сервере, сначала нужно put файл crontab.