2010-12-02 9 views
0

ausführen Ziel: Update /var/www mit neuesten auf Svn Commit.wie Svn Update über Svn Post-Commit-Hook

Ubuntu Server 10.10, letzte apache2, neueste SVN, Standort: /var/svn/[projectname]

Um dies zu tun, habe ich eine einfache post-commit-Skript:

#!/bin/bash 

#tests if www-data user runs this script on commit (which it does) 
touch /tmp/test.log 

#works when run from the command line (sudo ./post-commit) but not when run by www-data 
sudo /usr/bin/svn update /var/www 

das Thema des zweiten Befehls zu beheben nicht funktioniert als www-data ich habe versucht ...

Schnitt: sudo visudo und hinzugefügt (am Ende): www-data ALL=(ALL) NOPASSWD:ALL

Chowning: /var/www-www-data:www-data

CHMOD: alle /var/www-777

noch kein Glück ... irgendwelche Ideen?

+0

Welchen Fehler bekommen Sie? Cron sollte jede stderr-Ausgabe per E-Mail senden. –

Antwort

1

Was ist, wenn Sie das ausführen:

su - www-data -c '/usr/bin/svn update /var/www' 

(Das sudo ist nicht erforderlich, wenn/var/www/777 ist und von www-data ..)

Als Root-Benutzer? (dann suid() s als www-data und führe den Befehl aus). Es sollte mehr Informationen darüber geben, was tatsächlich fehlschlägt.

Oder Sie könnten versuchen, die svn update Ausgabe von Ihrem post-commit Haken Anmeldung:

/usr/bin/svn update /var/www &> /tmp/my-svn-update.log 

Ich denke, dass diese beiden Tests sollten Sie mehr Informationen geben, was passiert ist.

SEITENHINWEIS: Ich bin mir nicht sicher, ob Sie wirklich das Risiko eingehen wollen, dass www-data Befehle als root-Benutzer ausführen können. Wenn Sie unbedingt svn als root ausführen müssen (I sehen nicht den Punkt da, aber es könnte sein), benutzen Sie einfach diese in/etc/sudoers:

www-data ALL=NOPASSWD: /usr/bin/svn 
0

ich ging zuerst mit dem Logging-Mechanismus Sie vorgeschlagen und das half es zu beheben! Vielen Dank!

Der ausgegebene Fehler hatte etwas mit einem Dateinamen im Repro zu tun, der nicht in UTF-8 konvertiert werden konnte. Ich habe die Datei gelöscht und es hat funktioniert. Aber warum hat es funktioniert, wenn ich Post-Commit direkt anrufe ... Ich habe keine Ahnung.

BTW, ich habe mich geirrt darüber bash zu sein (es war sh) so hatte ich &> 2>

Auch löschte ich die ausgecheckt Dateien zu ändern, setzen Sie die Berechtigungen und Besitzer zurück auf den Normal/var/www und prüfte sie dann erneut.

meine letzte sudoers Linie:

www-data ALL=NOPASSWD:/usr/bin/svn update /var/www 

Vielen Dank für die Hilfe!