Git auto-pull en utilisant cronjob

J’essayais de créer un job cron avec une tâche de faire un git pull chaque minute pour garder mon site de production en phase avec ma twig principale.

L’utilisateur de système nobody doit pas effectuer la requête git en raison du problème de permissions. Cependant, il semble que le compte de nobody soit pas autorisé à exécuter des commandes. Je dois donc créer des tâches en tant qu’utilisateur root .

L’entrée crontab que j’ai essayée:

 */1 * * * * su -s /bin/sh nobody -c 'cd ~heilee/www && git pull -q origin master' >> ~/git.log 

Cela ne fonctionne pas et je ne sais pas comment le déboguer.

Quelqu’un pourrait-il aider?

UPDATE1: la commande git pull elle-même est correcte. Je peux l’exécuter sans erreurs.

Solution:

 */1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master' 

Bien que vous ayez besoin de savoir comment faire fonctionner la mise à jour en premier lieu, vous feriez bien mieux d’utiliser un crochet en amont pour y arriver. Vous pouvez le faire simplement avec curl depuis un hook post-commit ou si vous utilisez github, utilisez simplement un hook post-réception de leur côté.

 */1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master' 

Cela corrige quelques erreurs qui empêchaient la réponse acceptée de fonctionner sur mon système (serveur Ubuntu> 10.04). Le changement clé semble être le -q après le pull plutôt qu’avant. Vous ne remarquerez pas que votre pull ne fonctionne pas tant que vous n’avez pas utilisé le fichier /var/log/syslog ou que vous n’avez pas essayé d’exécuter votre code de production non mis à jour.

 #!/bin/bash cd /home/your_folder/your_folder && /usr/bin/git pull [email protected]:your_user/your_file.git 

qui a été utilisé par moi et a travaillé

Je crée un petit script pour y faire face.Puis, je peux utiliser la commande crontab

 crontab -e 0 2 * * * cd /root && ./gitpull.sh > /root/log/cron.log 2>&1 & 

Voici le gitpull.sh :

 #!/bin/bash source /etc/profile PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH export TERM=${TERM:-dumb} #---------------------------------------- # Please set the following variable section # Please set up working directories, use','split # eg:path="/root/test/path1,/root/test/path2" path="" #---------------------------------------- # Do not edit the following section # Check if user is root [ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must run this script as root.${CEND}"; exit 1; } 2>&1 # Check if directory path exists if [[ "${path}" = "" ]]; then echo "${CFAILURE}Error: You must set the correct directory path.Exit.${CEND}" 2>&1 exit 1 fi # Check if command git exists if ! [ -x "$(command -v git)" ]; then echo "${CFAILURE}Error: You may not install the git.Exit.${CEND}" 2>&1 exit 1 fi # Check where is command git git_path=`which git` # Start to deal the set dir OLD_IFS="$IFS" IFS="," dir=($path) IFS="$OLD_IFS" echo "Start to execute this script." 2>&1 for every_dir in ${dir[@]} do cd ${every_dir} work_dir=`pwd` echo "---------------------------------" 2>&1 echo "Start to deal" ${work_dir} 2>&1 ${git_path} pull echo "---------------------------------" 2>&1 done echo "All done,thanks for your use." 2>&1 

Nous devons définir le répertoire de travail