I was trying to create a cronjob with a task to do a git pull
every minute to keep my production site in sync with my master branch.
The git pull needs
While you do need to figure out how to get the update to work in the first place, you'd be far better off using a hook from the upstream to make it go. You can do this simply with curl from a post-commit
hook or if you're using github, just use a post-receive hook on their side.
I create a small script to deal with it.Then can use the by command crontab
crontab -e
0 2 * * * cd /root && ./gitpull.sh > /root/log/cron.log 2>&1 &
Here are the 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
We have to set the work directory
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master'
This corrects a couple errors that prevented the accepted answer from working on my system (Ubuntu >10.04 server). The key change seems to be the -q
after the pull
rather than before. You won't notice that your pull isn't working until you tail the /var/log/syslog
file or try to run your non-updated production code.
#!/bin/bash
cd /home/your_folder/your_folder && /usr/bin/git pull git@bitbucket.org:your_user/your_file.git
that is has been using by me and worked
Solution:
*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git pull -q origin master'