Git Push no funciona cuando el script se ejecuta a través de Launchd

Hice un script para hacer un mysqldump, enviar este volcado a mi Git local y luego enviar este Git a mi count de bitbucket. El script funciona bien cuando lo ejecuto a través del terminal ( sh script.sh ). Hice un file Plist y lo agregué para que Launchd lo ejecute.

Launchd lo ejecuta puntualmente todas las noches a las 3 a.m. según lo planeado, y ejecuta todos los commands bien, excepto para empujar el compromiso local de Git a bitbucket. ¿Qué estoy haciendo mal?

Como puede ver en mi script, traté de agregar muchos loggings, pero el logging que recibo todavía no me dice por qué el push no funciona, solo que no funciona.

Entonces mi pregunta es doble:

  1. ¿Cómo puedo enviar mi Git local a bitbucket en un script que se ejecute en launchd?
  2. ¿Qué puedo agregar a mi script (o en otro lugar) para que pueda iniciar session desde launchd o este script para poder diagnosticar lo que está pasando?

Mi guion

 #!/bin/sh exec 1> /Library/WebServer/Documents/backup/fulllog # echo start message echo $(date) "- Backup Script Processing" >> /Library/WebServer/Documents/backup/log # navigate to backup dir if cd /Library/WebServer/Documents/backup/ then echo $(date) "- Successfully navigated to backup dir" >> /Library/WebServer/Documents/backup/log else echo $(date) "- Could not locate backup directory" >> /Library/WebServer/Documents/backup/log exit 0 fi # echo message echo $(date) "- Exporting SQL dump" >> /Library/WebServer/Documents/backup/log if #dump the db into a .sql file /usr/local/mysql/bin/mysqldump --user=root --password=password --skip-extended-insert library > /Library/WebServer/Documents/backup/library.sql; then #echo success message echo $(date) "- SQL dump successful" >> /Library/WebServer/Documents/backup/log else #echo error message echo $(date) "- Mysqldump error" >> /Library/WebServer/Documents/backup/log exit 0 fi #add just created mysqldump to git if /usr/local/git/bin/git add library.sql then echo $(date) "- Backup successfully added to local Git staging" >> /Library/WebServer/Documents/backup/log else echo $(date) "- Error adding backup to local Git staging" >> /Library/WebServer/Documents/backup/log exit 0 fi if /usr/local/git/bin/git add log then echo $(date) "- Log successfully added to local Git staging" >> /Library/WebServer/Documents/backup/log else echo $(date) "- Error adding log to local Git staging" >> /Library/WebServer/Documents/backup/log exit 0 fi if /usr/local/git/bin/git commit -m 'Nightly SQL dump' then echo $(date) "- Backup successfully committed to local Git" >> /Library/WebServer/Documents/backup/log else echo $(date) "- Error committing backup to local Git" >> /Library/WebServer/Documents/backup/log exit 0 fi if /usr/local/git/bin/git push origin master then echo $(date) "- Backup Git Commit successfully pushed to origin master" >> /Library/WebServer/Documents/backup/log else echo $(date) "- Backup Git Commit not pushed to origin master" >> /Library/WebServer/Documents/backup/log fi 

Editado para agregar: Gracias por su respuesta. He agregado la variable de entorno GIT_TRACE=1 .

Tienes razón en que no había authentication hacia Bitbucket en los guiones, estaba presionando sobre https usando mi nombre de usuario / pw combo en mi Llavero.

Configuré SSH usando las instrucciones de Bitbucket . He hecho un script ssh.sh que se ve así (y chmod +x 'd it):

 #!/bin/sh exec ssh -i "Users/sara/.ssh" "$@" 

He agregado este script como una variable usando export GIT_SSH = /Library/WebServer/Documents/scripts/ssh.sh .

Cuando probé esta configuration para enviar a Bitbucket (usando terminal) funciona, pero con un error de que mi directory o file SSH no existe. Supongo que solo funciona ahora porque el ssh-agent ya se estaba ejecutando, y que fallará debido al error "no existe" cuando se ejecuta a través de launchd. He intentado referirme a la location con "~ / .ssh", e incluyendo el nombre del file, todas las opciones arrojan el mismo error.

¿Que hago después? ¿Cómo puedo consultar la location de mi key para que se encuentre?

Solución: al final no usé las variables de entorno.

La solución para que funcione para mí fue habilitar SSH (antes estaba usando HTTPS). Al final agregué

 Host bitbucket.org StrictHostKeyChecking no IdentityFile /Users/sara/.ssh/id_rsa 

A mi file ~ / .ssh / config, porque me seguía pidiendo mi frase de contraseña. No quería eliminar por completo mi frase de contraseña, pero esto permitió que la secuencia de commands funcionara. Después de borrar una input doble en Launchd (mi plist estaba en las carpetas Sistema y Usuario) finalmente funcionó correctamente anoche.

Puede configurar la variable de entorno GIT_TRACE=1 para que git muestre qué commands está ejecutando y dónde sale mal.

Dicho esto, no hay authentication en este script, así que voy a seguir adelante y supongo que ese es el problema. Lo más probable es que cuando ejecute el script desde su shell tenga en ejecución su agente ssh-agent que contenga su key. Cuando se ejecuta a través de launchd, el agente no está configurado y la key no está en uno de los files pnetworkingeterminados (o está protegida por contraseña).

Puede solucionar esto apuntando la variable de entorno GIT_SSH a un contenedor de script de shell que contenga algo como esto:

 #!/bin/sh exec ssh -i "path/to/my/unencrypted/ssh/key" "$@" 

No te olvides de chmod +x it.