2015-10-23 11 views
7

Nel mio crontab, ho la seguente linea:git commit non funziona da un job cron, anche se git pull funziona

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

Lo script fa quello che suggerisce il nome - aggiungere, impegnarsi e spingere:

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 

Come si è visto nel file di registro, il "commit" non fa nulla, mentre il "pull" funziona bene:

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

ho eseguito le s esatte Comando ame, un minuto dopo, dalla riga di comando, ed ha ottenuto il seguente registro, il che significa che il commit è accaduto:

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 == 

Qual è il problema nella gestione di commettere da un lavoro cron?

NOTA: ho anche fatto lo stesso esperimento con un effettivo cambiamento in un file di prova. Ho scoperto che, in effetti, il commesso non è accaduto dal crontab (nulla è stato spinto a monte), ma è accaduto dalla riga di comando.

+3

'git push' richiede un file .gitconfig per impostare le cose come l'autore e-mail. git non spingerà senza quelle impostazioni presenti.Sembra che tu stia scorrendo attraverso cron - git non possa localizzare questo file perché cron viene eseguito in un ambiente diverso. Potresti anche provare ad aggiungere '2> & 1' allo script di cron in modo da ottenere anche l'output di stderr nel tuo log. – Protagonist

+0

Dovresti aggiungere '2> & 1' come dice @Protagonist, probabilmente c'è un errore con git commit, o' $ 1' è vuoto e git si lamenta che il messaggio è vuoto, nessun file è stato aggiunto e git si lamenta perché il commit è vuoto – edi9999

+0

Ho aggiunto "2> & 1". Ora, quando corro dalla linea di comando, c'è effettivamente un messaggio che dice che non c'è nulla da impegnare. Ma quando viene eseguito da crontab, non appare alcun messaggio (vedi la mia modifica). Sembra che "git commit" non funzioni affatto! perché? –

risposta

7

cron utilizza sh di default, quindi provare, come descritto in "How to redirect output to a file from within cron?":

  • no 'bash'
  • con 2>&1 alla fine

Cioè:

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

E mettere nel vostro scrip bash ta shebang directive:

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

Un'altra forma sarebbe quella di utilizzare una riga di comando bash (come in "Redirecting the output of a cron job"):

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

Dopo aver cambiato l'ordine di reindirizzamento come consigliato, il mio file di log mostra, infatti, un messaggio di errore lungo dicendo:

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

ho già fatto nel mio conto, ma il lavoro cron probabilmente non trova il file di configurazione. Come posso farlo trovare il file di configurazione git corretto?

Il lavoro cron rischia di correre con un altro account (o root): la sua configurazione git globale (~/.gitconfig) non sarà la stessa di quella impostata con il tuo account utente.

Una soluzione semplice è repeat those git config (without --global) inside the target git repo: che registrerà l'id utente nel repository stesso, invece di fare affidamento su una configurazione globale che non è condivisa tra gli account.

+0

Fatto, ma non ha aiutato ... (perché $ BASH_SOURCE [0] ha qualche effetto sul commit git?) –

+0

@ ErelSegal-Halevi OK. Ho riscritto la risposta, in base a http://unix.stackexchange.com/a/52332/7490 – VonC

+0

@ ErelSegal-Halevi Ho modificato la risposta con un'altra opzione – VonC