依然灬灰

SVN服务器实现链接更新web目录

2018/02/01

使用版本控制SVN用钩子实现了刷新web目录的操作,但是却发现不足,只能刷新项目的根目录,这时候如果想刷新某一制定目录就很尴尬啦,所有考虑使用链接刷新目录。
最开始的想法是使用PHP调用shell脚本,更新需要的目录。

PHP部分

在web目录下创建一个php文件

PHP代码

1
2
3
4
5
6
7
<?php
error_reporting(7);//设置报错等级
error_reporting(E_ALL|E_STRICT);//设置报错等级
ini_set('display_errors', 'on');//显示报错
passthru("/usr/bin/sudo /root/svnupdate.sh 2>&1",$returnvalue);//php调用shell
var_dump($returnvalue);//打印返回信息
?>

shell部分

在/root目录下创建一个sh文件

shell代码

1
2
#!/bin/sh
/usr/bin/svn up /data/www/html/(需要更新的目录) --username svnupdater(svn更新的用户名) --password svnupdater(svn更新的密码) --no-auth-cache 2>&1

本地执行sh文件

1
[root@iZ2ze1jtxhkve7f07qko6nZ sshuser]# sh svnupdate.sh

出现以下信息说明shell可以使用

1
2
3
[root@iZ2ze1jtxhkve7f07qko6nZ sshuser]# sh svnupdate.sh
Updating '/data/www/html/':
At revision 1.

使用浏览器访问php文件

错误提示sudo: no tty present and no askpass program specified Sorry, try again.
这时会发现sudo需要输入密码
这时我们需要修改sudo的配置文件

1
[root@iZ2ze1jtxhkve7f07qko6nZ sshuser]# vim /etc/sudoers

在文件添加

1
2
3
4
##测试
nginx ALL=(ALL) NOPASSWD: /root/svnupdate.sh //nginx用户不需要密码既可以执行/root/svnupdate.sh
apache ALL=(ALL) NOPASSWD: /root/svnupdate.sh //apache用户不需要密码既可以执行/root/svnupdate.sh
具体使用web访问使用的什么用户就需要根据你安装web时的配置啦

重启nginx或apache,让用户重新获得权限。
再使用链接访问就可以更新的啦。

本文参考
错误提示sudo: no tty present and no askpass program specified Sorry, try again.