Frage

Wie implementieren Menschen / Versionskontrolle Cronjobs zur Produktion? Ich bin neugierig auf Konventionen / Normen Menschen als eine bestimmte Lösung, aber ich passiere git für Revisionskontrolle zu verwenden, und die Cronjobs einen Python / Django-Skript ausgeführt wird.

War es hilfreich?

Lösung

Wenn Sie Stoff für deploment verwenden Sie eine Funktion hinzufügen könnte, die Ihre crontab bearbeitet.

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

Dies würde einen Job zu crontab anhängen (Disclaimer: völlig ungetestet und nicht sehr idempotent).

  1. die crontab zu einer temporären Datei speichern.

  2. Fügen Sie eine Zeile in die tmpfile.

  3. Schreiben Sie die crontab zurück.

Dies ist propably nicht genau das, was Sie tun möchten, aber in diese Richtung Sie die Überprüfung der crontab in git denken konnte und es auf dem Server mit jedem deploy überschrieben. (Wenn es ein spezielles Benutzer für Ihr Projekt.)

Andere Tipps

Mit Stoff, ziehe ich es vor Ort eine unberührte Version meiner crontab zu halten, dass die Art, wie ich genau weiß, was auf die Produktion ist und Einträge zusätzlich leicht bearbeiten, sie zu addieren.

Der Stoff Skript, das ich wie folgt aussieht etwas verwenden (einige Codes redigiert zum Beispiel von Backups kümmern):

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

Sie können auch einen Blick auf:

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

django-fab-deploy-Modul verfügt über eine Reihe von praktischen Skripte einschließlich crontab_set und crontab_update

Sie wahrscheinlich so etwas wie CFEngine / Chef für die Bereitstellung verwenden können (es kann alles einsetzen - einschließlich Cron-Jobs)

Wenn Sie jedoch diese Frage stellen - es könnte sein, dass Sie viele Produktionsserver jede laufen große Anzahl von geplanten Aufträgen haben. Wenn dies der Fall ist, möchten Sie wahrscheinlich ein Werkzeug, das nicht nur Arbeitsplätze bereitstellen können, sondern auch Erfolg und Misserfolg verfolgen, können Sie einfach auf Protokolle aus dem letzten Lauf schauen, führen Statistiken, können Sie leicht den Zeitplan ändern für viele Arbeitsplätze und auf einmal Servern (aufgrund geplanten Wartung ...) etc.

Ich benutze ein kommerzielles Tool "UC4" genannt. Ich empfehle, nicht wirklich, so dass ich hoffe, Sie können ein besseres Programm finden, die das gleiche Problem lösen können. Ich sage nur, dass die Verabreichung von Arbeitsplätzen nicht zu Ende, wenn Sie sie einsetzen.

Es gibt wirklich drei Optionen manuell einen crontab bereitstellen, wenn Sie nicht Ihr System bis zu einem Konfigurationsmanagementsystem wie cfengine / puppet verbinden können.

Sie können einfach mit crontab -u Benutzer -e , aber Sie das Risiko, dass jemand einen Fehler in ihrem Kopieren / Einfügen ausführen zu müssen.

Sie können auch die Datei in das Cron-Verzeichnis kopieren, aber es gibt keine Syntax für die Datei und in Linux-Prüfung müssen Sie touch / var / spool / cron , um crond zur Abholung der Änderungen laufen .

Hinweis Jeder wird den Befehl touch irgendwann vergessen.

Nach meiner Erfahrung ist diese Methode mein Liebling manuelle Art und Weise eine crontab der Bereitstellung.

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

Ich denke, die Methode, die ich oben erwähnt ist die beste, weil Sie das Risiko von copy / paste Fehlern nicht ausgeführt werden, die Sie mit Ihrer Version gesteuert Datei der Konsistenz hilft. Es führt Syntaxprüfung des Cron-Tasks innerhalb der Datei, und Sie werden nicht den Befehl touch ausführen müssen, wie würden Sie, wenn Sie die Datei einfach kopieren waren.

Wenn Sie Django verwenden, werfen Sie einen Blick auf die Jobs System von django-Befehlserweiterungen .

Die Vorteile sind, dass Sie Ihre Aufträge in Ihrer Projektstruktur mit Versionskontrolle halten können, alles in Python schreiben und crontab konfigurieren, dass nur einmal.

Ich verwende Buildout meine Django-Projekte zu verwalten. Mit Buildout, verwende ich z3c.recipe.usercrontab installieren Cron-Jobs in deploy oder zu aktualisieren.

Mit einem Projekt unter Versionskontrolle, einschließlich Ihren crontab.txt, ist das, was ich bevorzuge. Dann mit Stoffe , es ist so einfach wie folgt aus:

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

Dadurch wird der Inhalt von deployment/crontab.txt auf die crontab des Benutzers installieren Sie eine Verbindung zum Server. Wenn Sie auf dem Server Ihr komplettes Projekt nicht, würden Sie zuerst die crontab-Datei put.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top