Question

Comment les utilisateurs déploient-ils / contrôlent-ils le contrôle de version en production? Je suis plus curieux des conventions / standards que les gens utilisent que n'importe quelle solution particulière, mais il se trouve que j'utilise git pour le contrôle des révisions, et que cronjob exécute un script python / django.

Était-ce utile?

La solution

Si vous utilisez Fabric pour déploment, vous pouvez ajouter une fonction permettant de modifier votre 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')

Ceci ajouterait un travail à votre crontab (disclaimer: totalement non testé et pas très idempotent).

  1. Enregistrez la crontab dans un fichier temporaire.

  2. Ajoute une ligne au fichier tmp.

  3. Réécrivez la crontab.

Ce n’est probablement pas exactement ce que vous voulez faire, mais vous pourriez penser à vérifier la crontab dans git et à l’écraser sur le serveur à chaque déploiement. (s’il existe un utilisateur dédié à votre projet.)

Autres conseils

Avec Fabric, je préfère conserver localement une version vierge de ma crontab, ce qui me permet de savoir exactement ce qui se passe en production et de modifier facilement les entrées en plus de les ajouter.

Le script de structure que j'utilise ressemble à ceci:

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

Vous pouvez également consulter:

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

Le module django-fab-deploy contient un certain nombre de scripts pratiques, notamment crontab_set et crontab_update

Vous pouvez probablement utiliser quelque chose comme CFEngine / Chef pour le déploiement (il peut tout déployer, y compris les tâches cron)

Toutefois, si vous posez cette question, il se peut que de nombreux serveurs de production exécutent chacun un grand nombre de tâches planifiées. Si tel est le cas, vous souhaitez probablement un outil capable non seulement de déployer des tâches, mais également de suivre les échecs de réussite, de consulter facilement les journaux de la dernière exécution, de générer des statistiques, de modifier facilement la planification de nombreux travaux et serveurs à la fois (en raison de la maintenance planifiée, etc.), etc.

J'utilise un outil commercial appelé "UC4". Je ne le recommande pas vraiment, alors j'espère que vous pourrez trouver un meilleur programme capable de résoudre le même problème. Je dis simplement que l'administration des tâches ne se termine pas lorsque vous les déployez.

Il existe en réalité 3 options pour déployer manuellement une crontab si vous ne pouvez pas connecter votre système à un système de gestion de la configuration tel que cfengine / puppet.

Vous pouvez simplement utiliser crontab -u utilisateur -e , mais vous courez le risque qu'une personne présente une erreur lors de son copier / coller.

Vous pouvez également copier le fichier dans le répertoire cron mais il n’existe aucune vérification de syntaxe pour le fichier. Sous Linux, vous devez exécuter touch / var / spool / cron afin que crond puisse récupérer les modifications. .

Remarque Tout le monde oubliera la commande tactile à un moment donné.

D'après mon expérience, cette méthode est ma méthode manuelle préférée pour déployer une crontab.

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

Je pense que la méthode que j'ai mentionnée ci-dessus est la meilleure, car vous ne courez pas le risque d'erreur de copier / coller, ce qui vous aide à maintenir la cohérence avec votre fichier de version contrôlée. Il vérifie la syntaxe des tâches périodiques à l'intérieur du fichier. Vous n'aurez pas besoin d'exécuter la commande touch comme vous le feriez si vous copiez simplement le fichier.

Si vous utilisez Django, consultez les offres d'emploi. système à partir des extensions de commande Django .

L'avantage est que vous pouvez conserver vos travaux dans la structure de votre projet, avec le contrôle de version, tout écrire en Python et configurer crontab une seule fois.

J'utilise Buildout pour gérer mes projets Django. Avec Buildout, j'utilise z3c.recipe.usercrontab installer des tâches cron en déploiement ou en mise à jour.

Je préfère utiliser votre projet sous contrôle de version, y compris votre fichier crontab.txt. Ensuite, avec Fabric , c'est aussi simple que cela:

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

Ceci installera le contenu de deployment / crontab.txt dans la crontab de l'utilisateur que vous vous connectez au serveur. Si vous n'avez pas votre projet complet sur le serveur, vous voudriez mettre le fichier crontab en premier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top