Domanda

In che modo le persone distribuiscono / versione controllano i cronjobs in produzione? Sono più curioso delle convenzioni / standard che le persone usano rispetto a qualsiasi soluzione particolare, ma mi capita di usare git per il controllo di revisione e il cronjob sta eseguendo uno script Python / Django.

È stato utile?

Soluzione

Se stai usando Fabric per il deploment potresti aggiungere una funzione che modifica il tuo 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')

Questo aggiungerebbe un lavoro al tuo crontab (dichiarazione di non responsabilità: totalmente non testata e non molto idempotente).

  1. Salva il crontab in un file temp.

  2. Aggiunge una riga al file tmp.

  3. Riscrivi il crontab.

Questo è probabilmente non esattamente quello che vuoi fare ma lungo quelle linee potresti pensare di controllare il crontab in git e sovrascriverlo sul server ad ogni distribuzione. (se esiste un utente dedicato per il tuo progetto.)

Altri suggerimenti

Usando Fabric, preferisco mantenere localmente una versione incontaminata del mio crontab, in questo modo so esattamente cosa c'è in produzione e posso facilmente modificare le voci oltre ad aggiungerle.

Lo script di fabric che uso ha un aspetto simile al seguente (alcuni codici sono stati redatti, ad es. prendendosi cura dei backup):

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

Puoi anche dare un'occhiata a:

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

Il modulo django-fab-deploy ha una serie di comodi script tra cui crontab_set e crontab_update

Probabilmente puoi usare qualcosa come CFEngine / Chef per la distribuzione (può distribuire tutto, inclusi cron job)

Tuttavia, se si pone questa domanda, è possibile che si disponga di numerosi server di produzione che eseguono ciascuno un numero elevato di processi pianificati. In tal caso, probabilmente si desidera uno strumento che non solo può distribuire lavori, ma anche tenere traccia degli errori di successo, consentire di consultare facilmente i registri dell'ultima esecuzione, eseguire statistiche, consentire di modificare facilmente la pianificazione per molti lavori e server contemporaneamente (a causa della manutenzione pianificata ...) ecc.

Uso uno strumento commerciale chiamato " UC4 " ;. Non lo consiglio davvero, quindi spero che tu possa trovare un programma migliore in grado di risolvere lo stesso problema. Sto solo dicendo che l'amministrazione dei lavori non termina quando li distribuisci.

Esistono davvero 3 opzioni per distribuire manualmente un crontab se non riesci a connettere il tuo sistema a un sistema di gestione della configurazione come cfengine / puppet.

Puoi semplicemente usare crontab -u user -e ma corri il rischio che qualcuno abbia un errore nella loro copia / incolla.

Puoi anche copiare il file nella directory cron ma non c'è sintassi per il controllo del file e in Linux devi eseguire touch / var / spool / cron per far sì che crond raccolga le modifiche .

Nota Tutti dimenticheranno il comando touch ad un certo punto.

Nella mia esperienza questo metodo è il mio modo manuale preferito di distribuire un crontab.

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

Penso che il metodo che ho menzionato sopra sia il migliore perché non corri il rischio di errori di copia / incolla che ti aiutano a mantenere la coerenza con il tuo file controllato con la versione. Esegue il controllo della sintassi delle attività cron all'interno del file e non sarà necessario eseguire il comando touch come se si copiasse semplicemente il file.

Se stai usando Django, dai un'occhiata ai lavori sistema da django-command-extensions .

I vantaggi sono che puoi mantenere i tuoi lavori all'interno della struttura del tuo progetto, con il controllo della versione, scrivere tutto in Python e configurare crontab solo una volta.

Uso Buildout per gestire i miei progetti Django. Con Buildout, utilizzo z3c.recipe.usercrontab per installare cron job in deploy o update.

Avere il tuo progetto sotto il controllo della versione, incluso crontab.txt, è ciò che preferisco. Quindi, con Fabric , è semplice come questo:

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

Questo installerà il contenuto di deployment / crontab.txt sul crontab dell'utente che ti connetti al server. Se non hai il tuo progetto completo sul server, dovresti prima inserire il file crontab.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top