我需要一个 PHP 脚本来执行,git pull
但是我还没有天真到给它授予git
.我已经封装git pull
了一个具有以下权限的脚本www-data
,但我不确定如何授予脚本git
自身权限:
$ sudo tail -n1 /etc/sudoers
www-data ALL=(ALL) NOPASSWD: /home/php-scripts/git-pull
$ cat /home/php-scripts/git-pull
#!/bin/bash
/usr/bin/git pull
$ ls -la /home | grep php-scripts
drwxr-xr-x 2 ubuntu ubuntu 4096 Sep 3 09:26 php-scripts
$ ls -la /home/php-scripts/git-pull
-rwxrwxr-x 1 ubuntu ubuntu 30 Sep 3 08:44 /home/php-scripts/git-pull
$ cat /var/www/public_html/git-wrapper.php
<?php
$output = array();
$value = 0;
exec("/home/php-scripts/git-pull", $output, $value);
echo "<pre>";
echo "Return Value: {$value}\n";
foreach ( $output as $o) {
echo $o."\n";
}
?>
请注意,这/var/www/public_html/
实际上是一个 git 存储库。我经常git pull
通过 CLI 在该目录中执行操作。但是,当我在 Web 浏览器中调用此脚本时,我发现文件未通过更新,git pull
并且以下内容输出到浏览器:
Return Value: 1
这是在带有 Git 1.7.9.5 的 Ubuntu Server 12.04 上。远程存储库位于同一服务器上。
答案1
www-data:www-data
我想你的脚本运行在下面。您必须git pull
使用对克隆存储库具有写入权限的用户来运行。您已经配置了sudo
,但是您没有在任何没有多大意义的地方调用它(根本不是说您需要这样做)。验证您正在运行的用户,然后根据需要切换到适当的用户,并相应地调整克隆存储库的权限。