我使用oscwebhook更新代码,发现并没有更新,手动执行那个php文件,发现没有问题,但是一旦让他自动接收webhook的请求自动更新就更新不了,我以为是权限问题,就把权限都设置成777,发现还是不行,很是纠结,手动执行却没有问题,大神求解!
求大神解决方案,小弟不胜感激!
我使用oscwebhook更新代码,发现并没有更新,手动执行那个php文件,发现没有问题,但是一旦让他自动接收webhook的请求自动更新就更新不了,我以为是权限问题,就把权限都设置成777,发现还是不行,很是纠结,手动执行却没有问题,大神求解!
求大神解决方案,小弟不胜感激!
关键在这里,linux 谁 去执行 shell_exec() 或 exec()
是 root 还是 apache 还是 nginx ??? 可以用 php echo exec('whoami')
来确定
另外,确定了是谁执行。 再检查是否有 ssh 拉取代码的权限 要在 OSC 加 这个用户的 公钥
sudo -u nginx ssh-keygen -t rsa -C "xxx@xxx.com"
<?php
header("Content-type:text/html;charset=utf-8");
$json = file_get_contents("php://input");
if (!$json)
render('数据不为空');
$data = json_decode($json, true); // array
$token = isset($data['token']) ? $data['token'] : false;
$password = isset($data['password']) ? $data['password'] : false;
if (!$token || !$password)
render('数据不正确');
if ($token != 'xxxxxxx' || $password != 'xxxxxx')
render('账号或密码不正确');
$after = isset($data['after']) ? $data['after'] : '';
/*
$str = $json . PHP_EOL;
$file = __DIR__ . '/' . date('YmdHis') .'.json';
file_put_contents($file, $str, FILE_APPEND);
*/
// $cmd = "whoami"; // 执行者
$path = '/hardware'; // 源代码路径
$cmd = "cd {$path} && /usr/bin/git pull";
// $cmd = "cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1";
$out = shell_exec($cmd);
render('代码已更新到 ' . $after);
// ---------------------------------
function render($message)
{
echo date('Y-m-d H:i:s') . ' ' . $message;
exit;
}
5 回答2.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
3 回答2.7k 阅读
2 回答783 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
看看是不是执行程序的用户没有权限