web-dev-qa-db-fra.com

Git auto-pull utilisant cronjob

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

Le git pull doit être effectué par l'utilisateur système nobody, en raison du problème des autorisations. Cependant, il semble que le compte nobody ne 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: le git pull la commande elle-même est correcte. Je peux l'exécuter sans erreur.

52
kayue

Solution:

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

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

11
Dustin
*/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 (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 traction ne fonctionne pas tant que vous n'avez pas suivi le /var/log/syslog fichier ou essayez d'exécuter votre code de production non mis à jour.

5
hobs
#!/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é

3
Syarif Alamoudi

Je crée un petit script pour y faire face, puis je peux utiliser la commande by 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
xiazhanjian