Git auto-pull using cronjob

后端 未结 5 1536
死守一世寂寞
死守一世寂寞 2020-12-12 12:55

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

相关标签:
5条回答
  • 2020-12-12 13:08

    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.

    0 讨论(0)
  • 2020-12-12 13:09

    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

    0 讨论(0)
  • 2020-12-12 13:22
    */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.

    0 讨论(0)
  • 2020-12-12 13:22
    #!/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

    0 讨论(0)
  • 2020-12-12 13:30

    Solution:

    */1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git pull -q origin master' 
    
    0 讨论(0)
提交回复
热议问题