osc GITwebhook自动触发钩子到服务器后,发现服务器并没有执行更新,手动执行却可以,权限都是777,大神求解!

我是圣斗士
  • 5
新手上路,请多包涵

图片描述![][1]

图片描述

我使用oscwebhook更新代码,发现并没有更新,手动执行那个php文件,发现没有问题,但是一旦让他自动接收webhook的请求自动更新就更新不了,我以为是权限问题,就把权限都设置成777,发现还是不行,很是纠结,手动执行却没有问题,大神求解!
求大神解决方案,小弟不胜感激!

回复
阅读 2.4k
2 个回答
高了高了
  • 2
新手上路,请多包涵

看看是不是执行程序的用户没有权限

关键在这里,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;
}
宣传栏