Pergunta

Como as pessoas implantar / controle de versão cronjobs a produção? Eu estou mais curioso sobre convenções / padrões que as pessoas usam do que qualquer solução particular, mas acontece que eu estar usando git para controle de revisão, eo cron está executando uma python / django script.

Foi útil?

Solução

Se você estiver usando Tecido para deploment você pode adicionar uma função que edita o 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')

Este seria acrescentar um emprego para o seu crontab (disclaimer: totalmente testado e não muito idempotent).

  1. Salvar o crontab a um tempfile.

  2. Anexar uma linha ao tmpfile.

  3. Escreva a volta crontab.

Este não é propably exatamente o que você quer fazer, mas ao longo destas linhas que você poderia pensar sobre como verificar o crontab em git e substituir-lo no servidor com cada deploy. (Se houver um usuário dedicado para o seu projeto.)

Outras dicas

Usando tecido, eu prefiro manter uma versão primitiva do meu crontab localmente, de que maneira eu sei exatamente o que está em produção e pode facilmente editar entradas, além de adicioná-los.

O script tela eu uso é algo como isto (algum código redigido por exemplo, cuidar de backups):

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

Você também pode dar uma olhada em:

http: // django- fab-deploy.readthedocs.org/en/0.7.5/_modules/fab_deploy/crontab.html#crontab_update

módulo django-fab-deploy tem um número de scripts convenientes incluindo crontab_set e crontab_update

Você provavelmente pode usar algo como CFEngine / Chef para implantação (pode implantar tudo - incluindo trabalhos do cron)

No entanto, se você fizer essa pergunta - pode ser que você tem muitos servidores de produção cada grande número de execução de tarefas agendadas. Se este for o caso, você provavelmente quer uma ferramenta que não só pode implantar postos de trabalho, mas também controlar falha do sucesso, permitem que você facilmente olhar para os registros da última corrida, as estatísticas são executados, permitem que você mude facilmente a programação para muitos empregos e servidores ao mesmo tempo (devido à manutenção planejada ...) etc.

Eu uso uma ferramenta comercial chamado "UC4". Eu realmente não recomendo, então eu espero que você possa encontrar um programa melhor que pode resolver o mesmo problema. Só estou dizendo que a administração de postos de trabalho não termina quando você implantá-los.

Há realmente 3 opções de implantação manualmente um crontab se você não pode conectar seu sistema a um sistema de gerenciamento de configuração como cfengine / fantoche.

Você poderia simplesmente usar crontab -u usuário -e , mas você corre o risco de alguém ter um erro em seu copiar / colar.

Você também pode copiar o arquivo para o diretório cron mas não há nenhuma verificação de sintaxe para o arquivo e em linux você deve executar toque / var / spool / cron para que crond para pegar as mudanças .

Nota Todo mundo vai esquecer o comando touch em algum ponto.

Na minha experiência, este método é a minha forma manual favorito da implantação de um crontab.

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

Eu acho que o método que eu mencionei acima é o melhor porque você não corre o risco de copiar / colar erros que ajuda a manter a consistência com o seu arquivo controlado versão. Ele executa verificação de sintaxe das tarefas agendadas dentro do arquivo, e você não precisará executar o comando touch como você faria se você fosse simplesmente copiar o arquivo.

Se você estiver usando Django, dê uma olhada nas empregos sistema de django-Command-extensões .

As vantagens são que você pode manter seus empregos dentro de sua estrutura do projeto, com controle de versão, escrever tudo em Python e crontab configure apenas uma vez.

Eu uso buildout para gerenciar meus projetos Django. Com buildout, eu uso z3c.recipe.usercrontab instalar tarefas agendadas em implantar ou atualização.

Ter seu projeto sob controle de versão, incluindo o seu crontab.txt, é o que eu prefiro. Então, com Tecido , é tão simples como isto:

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

Isto irá instalar o conteúdo de deployment/crontab.txt ao crontab do usuário que você se conectar ao servidor. Se você não tem o seu projeto completo no servidor, você iria querer put o arquivo crontab em primeiro lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top