git commit no funciona desde un trabajo cron, aunque git pull funciona

En mi crontab, tengo la siguiente línea:

48 14 * * * bash /home/erelsgl/git/erel-sites/add-commit-push.bash "from home" 2&>1 >> /home/erelsgl/logs/backup_from_home.log 

El script hace lo que su nombre implica: agregar, confirmar y presionar:

 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR echo -------------------- date echo == add == /usr/bin/git add -A echo == commit == /usr/bin/git commit -m "$1" echo == pull == /usr/bin/git pull echo == push == /usr/bin/git push 

Como se ve en el file de logging, el "commit" no hace nada mientras el "pull" funciona bien:

 Fri Oct 23 14:48:01 IDT 2015 == add == == commit == == pull == Already up-to-date. == push == 

Ejecuté exactamente el mismo command, un minuto después, desde la línea de command, y obtuve el siguiente logging, lo que significa que la confirmación ocurrió:

 Fri Oct 23 14:49:31 IDT 2015 == add == == commit == On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean == pull == Already up-to-date. == push == 

¿Cuál es el problema al ejecutar la confirmación desde un trabajo cron?

NOTA: también hice el mismo experimento con un cambio real en un file de testing. Descubrí que, de hecho, la confirmación no se había producido desde el crontab (nada se había enviado al flujo ascendente) sino que se producía desde la command-line.

cron usa sh por defecto, entonces intente, como se describe en " Cómo networkingirigir la salida a un file desde dentro de cron? ":

  • no 'bash'
  • con 2>&1 al final

Es decir:

 48 14 * * * /home/erelsgl/git/erel-sites/add-commit-push.bash "from home" >> /home/erelsgl/logs/backup_from_home.log 2>&1 

Y pon en tu script bash una directiva shebang :

 #!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd $DIR ... 

Otra forma sería usar una línea de command bash (como en " Redirigir la salida de un trabajo cron "):

 48 14 * * * /bin/bash -l -c '/path/to/script >> ./log/my_log.log 2>&1' 

Después de cambiar el order de networkingirección como se recomienda, mi file de logging muestra un largo post de error que dice:

 Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity 

Ya hice esto en mi count, pero el trabajo cron probablemente no encuentre el file de configuration. ¿Cómo puedo hacer que encuentre el file de configuration de git correcto?

Es probable que el trabajo cron se ejecute con otra count (o raíz): su configuration global de git ( ~/.gitconfig ) no será la misma que la que configuró con su count de usuario.

Una solución simple es repetir esos git config (sin –global) dentro del repository git objective : eso registrará la identificación del usuario en el repository en sí, en lugar de confiar en una configuration global que no se comparte entre las counts.