Git auto-pull en utilisant cronjob

J'essayais de créer un cronjob avec une tâche de faire un git pull chaque minute pour garder mon site de production en synchronisation avec ma branche master.

L'extraction git doit être effectuée par l'utilisateur système nobody, en raison du problème d'autorisations. Cependant, il semble que le compte nobody n'est 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é:

*/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 de l'aide?

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

46
demandé sur hobs 2010-12-11 02:14:42

5 réponses

Solution:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master' 
27
répondu kayue 2010-12-11 08:39:57

Bien que vous ayez besoin de comprendre comment faire fonctionner la mise à jour, vous feriez mieux d'utiliser un crochet de l'amont pour le faire aller. Vous pouvez le faire simplement avec curl à partir d'un crochet post-commit ou si vous utilisez github, utilisez simplement un crochet post-réception de leur côté.

10
répondu Dustin 2010-12-11 03:30:18
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master'

Cela corrige quelques erreurs qui ont empêché la réponse acceptée de fonctionner sur mon système (Ubuntu > serveur 10.04). Le changement de 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 tail le fichier /var/log/syslog ou essayé d'exécuter votre code de production non mis à jour.

5
répondu hobs 2012-07-12 18:13:44
#!/bin/bash
cd /home/your_folder/your_folder && /usr/bin/git pull git@bitbucket.org:your_user/your_file.git

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

3
répondu Syarif Alamoudi 2014-10-13 05:19:36

Je crée un petit script pour y faire face.Alors pouvez utiliser la commande crontab

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

Voici les 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

1
répondu xiazhanjian 2018-06-07 00:23:34