2010-12-02 38 views
0

Objectif: mettre à jour /var/www avec la dernière version de svn commit.comment exécuter svn update via svn post-commit hook

serveur ubuntu 10.10, le dernier apache2, le dernier svn, lieu: /var/svn/[projectname]

Pour ce faire, je créé un simple script post-commit:

#!/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 

Pour résoudre le problème de la deuxième commande ne fonctionne pas comme www-data J'ai essayé ...

montage: sudo visudo et a ajouté (à la fin): www-data ALL=(ALL) NOPASSWD:ALL

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

chmodage: tous /var/www-777

Toujours pas de chance ... des idées?

+0

Quelle erreur obtenez-vous? cron devrait envoyer toute sortie stderr par email. –

Répondre

1

Que faire si vous exécutez ceci:

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

(Le sudo est pas nécessaire si/var/www/777 est et propriété de www-data ..)

En tant qu'utilisateur root? (alors suid() s comme www-data et exécutez la commande). Il devrait donner plus d'informations sur ce qui échoue réellement.

Ou, vous pouvez essayer de vous connecter la sortie svn update de votre post-commit hook:

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

Je pense que ces deux tests devraient vous donner plus d'informations sur ce qui est arrivé. SIDE NOTE: Je ne suis pas sûr que vous voulez vraiment prendre le risque d'avoir www-data capable d'exécuter n'importe quelle commande en tant qu'utilisateur root. Si vous avez absolument besoin de l'exécuter svn en tant que root (I ne voient pas le point là-bas, mais il pourrait être), il suffit d'utiliser cela dans votre fichier/etc/sudoers:

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

Je suis allé d'abord avec le mécanisme d'enregistrement que vous avez suggéré et qui a contribué à le fixer! Je vous remercie! L'erreur générée avait quelque chose à voir avec un nom de fichier dans le repro qui ne pouvait pas être converti en UTF-8. J'ai supprimé le fichier et cela a fonctionné. Mais pourquoi cela a-t-il fonctionné lors de l'appel direct post-commit ... Je n'ai aucune idée.

BTW, je me suis trompé à ce sujet étant bash (il était sh) donc je devais changer &> 2>

Aussi, je supprimé les fichiers extraits, réinitialiser les autorisations et le propriétaire de retour à la normale/var/www, puis les a vérifiés à nouveau.

ma dernière ligne sudoers:

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

Merci beaucoup pour l'aide!