exec有3个参数,第一个是要执行的命令,第二个是参数是一个数组,数组的值是由第一个命令执行后生成的,第三个参数执行的状态,0表示成功,其他都表示失败。
1.linux 切换用户
果当前是root用户,那么切换成普通用户test用以下命令:
su - test
如果要切换回root用户,那么用以下命令:
su或su -
2.在 linux 中运行 php 的用户,和 WebHooks 触发时,运行 php 的用户是两个用户
sudo mkdir -p /home/www/.ssh
sudo chown -R www.www /home/www/.ssh
sudo -Hu www ssh-keygen -t rsa
3. sudo -Hu www git clone https://git.coding.net/Tinywan/auto-test.git /home/www/web/hook/auto-test/ --depth=1
初始化克隆的时候要用www用户拉取
4.生成公私钥
sudo -Hu www ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去
#sudo cat /var/www/.ssh/id_rsa.pub # 这个只是针对单个项目的
sudo cat /home/www/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部
-Hu www
命令: -u
代表切换到哪一个用户,这里说的是www -H
代表切换HOME环境变量的值,也就是password文件中www用户对应的home目录
5.weehook文件内容
<?php
$cmd = "cd /www/wwwroot/nxxxx/nxx/ &&sudo git reset --hard origin/pt && sudo git pull origin pt && sudo git pull --all && sudo git pull origin pt 2>&1";
$res = array();
exec($cmd,$res);
var_dump($res);
6.原因
1、我们服务器上的web文件,大多是用户和用户组都是www,所以平时运行那些PHP文件,也都是www用户运行的。那么我们就必须以www用户来吧代码仓库clone下来,然后以www的身份去生成ssh密钥
ssh-keygen -t rsa -C "[email protected]",生成之后记得把公钥放在github里的项目配置里。
要以www用户创建公私钥才能hook成功。
转:https://blog.csdn.net/qq756684177/article/details/81335649
https://www.v2ex.com/amp/t/455526
https://www.cnblogs.com/wdw31210/p/11211978.html
https://www.cnblogs.com/wdw31210/p/11009968.html
原文地址:https://www.cnblogs.com/ygyy/p/11827587.html