git - remove - ¿para qué nos sirve el sha-1 cuando creamos tags?
Git auto-pull usando cronjob (5)
Estaba intentando crear un cronjob con una tarea para hacer un git pull
cada minuto para mantener mi sitio de producción sincronizado con mi rama principal.
El usuario del sistema nobody
debe realizar la extracción de git debido al problema de permisos. Sin embargo, parece que la cuenta de nobody
no está permitida ejecutar comandos. Entonces tengo que crear tareas como el usuario root
.
La entrada de crontab que probé:
*/1 * * * * su -s /bin/sh nobody -c ''cd ~heilee/www && git pull -q origin master'' >> ~/git.log
No funciona, y no sé cómo depurarlo.
¿Alguien podría ayudar?
ACTUALIZACIÓN1: el comando de git pull
es correcto. Puedo ejecutarlo sin errores.
Creo un pequeño script para manejarlo. Luego puedo usar el comando by crontab
crontab -e
0 2 * * * cd /root && ./gitpull.sh > /root/log/cron.log 2>&1 &
Aquí están los 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
Tenemos que establecer el directorio de trabajo
Si bien es necesario que averigüe cómo hacer que la actualización funcione en primer lugar, sería mucho mejor usar un gancho de la corriente ascendente para hacerlo funcionar. Puedes hacer esto simplemente con curl desde un enganche post-commit
o si estás usando github, solo usa un gancho post-receive en su lado.
Solución:
*/1 * * * * su -s /bin/sh nobody -c ''cd ~dstrt/www && /usr/local/bin/git -q pull origin master''
#!/bin/bash
cd /home/your_folder/your_folder && /usr/bin/git pull [email protected]:your_user/your_file.git
eso ha estado usando y trabajado
*/1 * * * * su -s /bin/sh nobody -c ''cd /home/heilee/src/project && /usr/bin/git pull origin master''
Esto corrige un par de errores que impidieron que la respuesta aceptada funcionara en mi sistema (servidor Ubuntu> 10.04). El cambio de clave parece ser el -q
después de la pull
lugar de antes. No notará que su extracción no funciona hasta que /var/log/syslog
archivo /var/log/syslog
o intente ejecutar su código de producción no actualizado.