Подтвердить что ты не робот

Git авто-тянуть с помощью cronjob

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

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

В crontab я пробовал:

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

Это не работает, и я не знаю, как его отладить.

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

UPDATE1: команда git pull правильная. Я могу запустить его без ошибок.

4b9b3361

Ответ 1

Решение:

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

Ответ 2

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

Ответ 3

*/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 или попробуйте запустить не обновленный производственный код.

Ответ 4

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

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

Ответ 5

Я создаю небольшой скрипт, чтобы справиться с ним. Затем можно использовать команду 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

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

Ответ 6

@xiazhanjian этот скрипт запрашивает имя пользователя и пароль. Из-за чего cronjob терпит неудачу. Я сделал что-то не так? Или любое возможное решение?