0

目標: /var/www 最新の svn commit で更新します。

ubuntu サーバー 10.10、最新の apache2、最新の svn、場所:/var/svn/[projectname]

これを行うために、単純なポストコミット スクリプトを作成しました。

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

2番目のコマンドがwww-dataとして機能しない問題を修正するために、私が試した...

編集:sudo visudoおよび追加(最後に):www-data ALL=(ALL) NOPASSWD:ALL

チャウニング:/var/wwwwww-data:www-data

Chmoding: /var/www777 までのすべて

まだ運がありません...何かアイデアはありますか?

4

2 に答える 2

1

これを実行するとどうなりますか:

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

(/var/www/ が 777 で、www-data が所有する場合、sudo は必要ありません。)

root ユーザーとして? (次にsuid()、www-dataとしてコマンドを実行します)。実際に何が失敗するかについて、より多くの情報を提供する必要があります。

または、svn updatepost-commit フックからの出力をログに記録してみてください。

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

これら 2 つのテストにより、何が起こったかについてより多くの情報が得られるはずです。

補足: www-data で root ユーザーとして任意のコマンドを実行できるようにするリスクを本当に冒したいのかどうかはわかりません.. どうしても svn を root として実行する必要がある場合 (要点がわかりません) /etc/sudoers でこれを使用してください:

www-data ALL=NOPASSWD: /usr/bin/svn
于 2010-12-02T23:49:54.073 に答える
0

私はあなたが提案したロギングメカニズムを最初に使用しましたが、それはそれを修正するのに役立ちました!ありがとうございました!

出力されたエラーは、UTF-8に変換できなかった再現のファイル名と関係がありました。ファイルを削除しましたが、機能しました。しかし、ポストコミットを直接呼び出すときになぜそれが機能したのか...私には手がかりがありません。

ところで、私はそれがbash(shだった)であると誤解されたので、&>を2>に変更する必要がありました。

また、チェックアウトしたファイルを削除し、権限と所有者を/ var / wwwで通常にリセットしてから、再度チェックアウトしました。

私の最後のsudoersライン:

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

助けてくれてありがとう!

于 2010-12-03T05:03:29.323 に答える