Git auto-pull с использованием cronjob - PullRequest
50 голосов
/ 11 декабря 2010

Я пытался создать cronjob с задачей выполнять git pull каждую минуту, чтобы синхронизировать мой производственный сайт с моей основной веткой.

Системный пользователь должен выполнить git pull nobody из-за проблем с разрешениями.Однако, похоже, что учетная запись nobody не может запускать команды.Поэтому я должен создавать задачи как пользователь root.

Запись в crontab, которую я пробовал:

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

Это не работает, и я не знаю, как отлаживать,

Может ли кто-нибудь помочь?

ОБНОВЛЕНИЕ1: сама команда git pull верна.Я могу запустить его без ошибок.

Ответы [ 5 ]

27 голосов
/ 11 декабря 2010

Решение:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git pull -q origin master' 
10 голосов
/ 11 декабря 2010

Несмотря на то, что вам нужно сначала выяснить, как заставить работать обновление, вам будет гораздо лучше использовать хук из апстрима для его запуска. Вы можете сделать это просто с помощью curl из post-commit hook или, если вы используете github, просто используйте зацепку post-receive на их стороне.

5 голосов
/ 11 июля 2012
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master'

Это исправляет пару ошибок, из-за которых принятый ответ не работал на моей системе (сервер Ubuntu> 10.04).Смена ключа, похоже, -q после pull, а не до.Вы не заметите, что ваш пул не работает, пока вы не подключите файл /var/log/syslog или не попробуете запустить не обновленный производственный код.

3 голосов
/ 13 октября 2014
#!/bin/bash
cd /home/your_folder/your_folder && /usr/bin/git pull git@bitbucket.org:your_user/your_file.git

, который использовался мной и работал

1 голос
/ 07 июня 2018

Я создаю небольшой скрипт для работы с ним. Затем можно использовать команду crontab

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

Вот 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

Мы должны установитьрабочий каталог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...