git push no funciona dentro de un trabajo cron

Actualmente estoy limpiando un desastre dejado por otra persona en un server de CentOS 6. Existe una aplicación que se debe respaldar en una count de github cada 6 horas. Hay una secuencia de commands que se ocupa de preparar los datos y se ocupa de la adición de git y de la confirmación de git.

El git push está a cargo de un guión "esperar". Esto se hizo para que la frase de contraseña se pueda pasar al git push cuando el ssh lo pida. El usuario no quiere usar una frase de contraseña vacía.

La secuencia de commands funciona bien cuando se ejecuta desde la command-line en un shell bash por el usuario raíz. Puedo ver los files transferidos a github.

Cuando la secuencia de commands se ejecuta en un crontab creado por la raíz, la secuencia de commands parece ejecutarse, pero la inserción de git no se lleva a cabo. Si ejecuto manualmente un git push, después de que el script ha fallado, noto que el empuje que debería haber sucedido ocurre junto con el manual que he llamado desde la línea de command. Parece que el empuje que debería haber sucedido en el script se almacenó en caching y no se envió a github.

¿Alguien puede sugerir lo que me falta aquí? ¿Es posible get un git push para trabajar en un script como este?

Saludos

Ricardo

El problema debe estar en la frase de contraseña que ssh-agent no pasa correctamente a ssh cuando el git push intenta ejecutarse.

Como se ilustra en la publicación de seguimiento del blog , no puede simplemente llamar a ssh-agent -s en su cron, sino que simplemente crearía otra instancia, sin key.

Para solucionarlo, necesitaba encontrar una manera de evitar iniciar otro process de ssh-agent y, en su lugar, get acceso al caballito de mar que se inicia cada vez que inicio session.
Hice un cambio en mi crontab que searchía el ID del process ssh-agent existente y el socket de authentication e importarlos en el entorno cron. Esto es una especie de truco, pero en realidad funciona (no como la última vez).
Simplemente agregue lo siguiente a su script antes de intentar conectarse a su server SSH (o haga lo que hice y colóquelos en el trabajo cron, separados por punto y coma):

 export SSH_AGENT_PID=`ps -a | grep ssh-agent | grep -o -e [0-9][0-9][0-9][0-9]` export SSH_AUTH_SOCK=`find /tmp/ -path '*keyring-*' -name '*ssh*' -print 2>/dev/null` 

Para aclarar:

Solo agrega lo siguiente a tu script

Eso significa que las dos líneas anteriores son parte de un script declarado como un trabajo cron y llamado por dicho trabajo cron.

ponerlos en el trabajo cron, separados por punto y coma

Si el script es lo suficientemente pequeño, puede deshacerse por completo del script y hacer de su trabajo cron una secuencia de commands: consulte " Ejecutar dos commands con un crontab ".

 crontab -l | { cmd1; cmd2 ; cmd3; } | crontab - 

Esa syntax no es más que una forma de agregar programáticamente un command a un trabajo cron .