2011-06-11 75 views
1

我想要做SVN更新更简单 - 调用PHP脚本。用svn更新php和ssl

我创建的PHP脚本:

$cmd = "svn update https://___/svn/website /var/www/html/website/ 2>&1"; 
exec($cmd, $out); 

由于运行脚本的用户阿帕奇(不是root),我得到一些权限错误。

如果我将每个目录的所有者更改为apache(或将所有内容更改为777),我还有另一个问题。因为我使用https协议,用户apache应该永久接受svn服务器的证书。我试图做“su - apache”并接受证书,但操作系统说“apache”不是有效的用户。我也不知道如何使用exec()函数接受证书。

有什么想法?我怎样才能让svn更新更简单?

+0

有没有一个httpd用户? – cwallenpoole 2011-06-11 23:39:09

回答

3

错误是否告诉您用户不是有效的svn用户?如果apache是​​运行httpd的用户,你应该可以使用它。这是我使用的脚本:

/usr/bin/svn --config-dir=/home/user/.subversion --username=svnuser --password=svnpass update 

一旦保存密码,您可以将其从命令中删除。再次确保上面的用户/通过是有效的SVN用户。

最近我实际上已经迁移到使用Hudson的svn更新,因为您可以安排它以及手动运行并执行一堆其他任务,此外您可以查看每个提交的svn日志以及任何控制台错误。

+0

我手动更改apache用户的/ etc/passwd文件(将/ sbin/nologin更改为/ bin/bash)。比我能够做到“su - apache”并且在服务器上存储证书。唯一要做的就是使用--config-dir选项,比如上面提到的ldg ..谢谢! – knagode 2011-06-12 00:55:04

1

在shell上使用getent apache。这将返回apache的shell。很可能,它是/ bin/nologin或/ bin/false。将其更改为/ bin/bash。您还需要指定主目录并在文件系统上创建它。

更新: getent apache实际上会返回apache用户的/ etc/passwd文件中的条目。该字符串中的最后一个标记是shell。

+0

getent没有任何返回。我手动更改apache用户的/ etc/passwd文件。 – knagode 2011-06-11 23:51:25

+0

我手动更改了apache用户的/ etc/passwd文件(用于将/ sbin/nologin更改为/ bin/bash)。我如何指定主目录?现在我可以执行“su - apache”并通过svn进行更新,但即使选择“永久保存证书”,证书也不会被存储。 – knagode 2011-06-12 00:02:54

+1

无论何时都会传递'--config-dir =/path/to/svnconfig'参数手动执行并在您的脚本中。 – ldg 2011-06-12 00:27:41

2

为什么不使用php svn functions而不是(不安全)的exec?

http://www.php.net/manual/en/function.svn-auth-set-parameter.php具有很好的认证选项示例。

+0

我也会尝试这个选项! Tnx – knagode 2011-06-12 00:56:07

+0

@stefgosselin如何执行'svn_update','svn_commit'等操作来显示遇到的错误消息? 使用'exec()'我没有问题获取并显示确切的问题。 有什么建议吗? – nimph 2012-03-05 20:58:04

+1

@nimph不幸的是,你可能已经看到了,svn_函数返回rev。成功的数字,失败的错误。我不知道你是否有宗教信仰,这些功能将被用于svn非常强大的'信仰'。如果安装正确,它应该可以正常工作,只要脚本具有适当的连接和正确的服务器凭据即可。 – stefgosselin 2012-03-08 05:57:45