2010-12-10 24 views
46

Ich habe versucht, einen Cronjob mit einer Aufgabe zu erstellen, um eine git pull jede Minute zu machen, um meine Produktionsstätte synchron mit meinem Master-Zweig zu halten.Git automatisch ziehen mit Cronjob

Der Git-Pull muss vom Systembenutzer nobody ausgeführt werden, aufgrund des Berechtigungsproblems. Es scheint jedoch, dass das Konto nobody keine Befehle ausführen darf. Also muss ich Aufgaben als root Benutzer erstellen.

Der crontab-Eintrag Ich habe versucht:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~heilee/www && git pull -q origin master' >> ~/git.log 

Es funktioniert nicht, und ich weiß nicht, wie es zu debuggen.

Konnte jemand helfen?

UPDATE1: Der git pull Befehl selbst ist korrekt. Ich kann es ohne Fehler ausführen.

+0

Was passiert, wenn Sie den Befehl selbst in einer Shell laufen? – Tom

+0

Haben Sie einen Benutzer namens 'git.log'? – Dustin

+0

@ Tom es läuft, wenn ich den Befehl selbst ausführen. – kayue

Antwort

24

Lösung:

*/1 * * * * su -s /bin/sh nobody -c 'cd ~dstrt/www && /usr/local/bin/git -q pull origin master' 
+2

funktioniert nicht für mich auf Ubuntu 10.04 Server. 3 verschiedene Fehler (~,/local/und -q verursachen alle Probleme) – hobs

+9

'*/1 * * * * su -s/bin/sh niemand -c 'cd/home/dstrt/src/project &&/usr/bin/git pull origin master'' funktioniert besser für mich: ~ erweiterung zuverlässiger, anderen weg zu git für meine verteilung, und-q option für git sollte nach "ziehen" oder gar nicht sein, sonst git barfs. – hobs

+0

*/1 * * * */bin/sh -c 'cd/pfad/zu/repo &&/usr/bin/git pull -q herkunft master' arbeitete für mich. – aaronbauman

9

Während Sie herausfinden müssen, wie das Update funktioniert, sollten Sie einen Hook aus dem Upstream verwenden, um es zum Laufen zu bringen. Sie können dies einfach mit Curl von einem post-commit Hook oder wenn Sie Github verwenden, verwenden Sie einfach einen Post-Empfang Haken auf ihrer Seite.

+0

Ein Hook ist viel sauberer als Cron. Hooks sind nur Skripte, also können Sie etwas wie 'cd/path/to/production && git pull' haben. –

+0

Kann ich Post-Commit Hook als "Niemand" ausführen? – kayue

+0

Ich habe dieses Skript (https://gist.github.com/737188) ausprobiert, habe aber ein Berechtigungsproblem, da die Verwendung dieses Skripts keine Berechtigung für das Zielverzeichnis hat. – kayue

5
*/1 * * * * su -s /bin/sh nobody -c 'cd /home/heilee/src/project && /usr/bin/git pull origin master' 

Dies korrigiert ein paar Fehler, die die akzeptierte Antwort von der Arbeit an meinem System (Ubuntu> 10.04 Server) verhindert. Die Schlüsseländerung scheint die -q nach der pull eher als vorher zu sein. Sie werden nicht bemerken, dass Ihr Pull nicht funktioniert, bis Sie die /var/log/syslog Datei beenden oder versuchen, Ihren nicht aktualisierten Produktionscode auszuführen.

2
#!/bin/bash 
cd /home/your_folder/your_folder && /usr/bin/git pull [email protected]:your_user/your_file.git 

, die von mir unter Verwendung war und arbeitete

+0

&& Befehl im Hintergrund ausführen. benutzen ; stattdessen &&. um den Befehl sequentiell auszuführen. –