1、高手在民间-先贴代码
<?php
/***
* User:peate
* Email:356522375@qq.com
* Desc:欢迎各位交流
*
* 热更新代码
* 1、传入项目名称
* 2、编写linux下执行命令
* 3、执行PHP中的exec 执行命令
*
* #命令解读:
* #进入到项目的仓库根目录下
* #cd /usr/local/nginx/html/{$project}/
* #重置当前仓库上个版本代码--防止仓库有更改导致更新失败,sudo 切换最高权限执行(相当于root)
* sudo git reset --hard
*#拉取代码 git pull 2>&1 错误转标准输出
* sudo git pull 2>&1
*/
$project = isset($_GET['project']) ? trim($_GET['project']) : '';
if (!empty($project)) {
echo $project . '---正在进行热更新,请稍等...' . "<br/>";
$shell = "cd /usr/local/nginx/html/{$project}/ && sudo git reset --hard && sudo git pull 2>&1";
exec($shell, $out);
var_dump($out);
echo "<br/>" . $project . '---正在进行热更新,更新完成' . "<br/>";
} else {
exit('Well done.');
}
2、linux git执行权限要设置一下
如果不配置sudo的话,上面这段更新git代码是100%无法正常使用的,因为sudo要root密码,那我们只想给git相关的命令在用sudo执行的时候不用密码,其他sudo命令一定要密码怎么办?
1.查看git的在哪里执行命令
[root@email ~]# whereis git
git: /usr/bin/git /usr/share/man/man1/git.1.gz
2.查看php是什么用户在运行的
[root@email public]# ps -ef|grep php
root 1111 1 0 2019 ? 00:00:14 php-fpm: master process
nobody 25036 1111 0 2019 ? 00:00:02 php-fpm: pool www
nobody 25055 1111 0 2019 ? 00:00:02 php-fpm: pool www
nobody 28265 1111 0 Jan01 ? 00:00:01 php-fpm: pool www
3.配置git命令sudo不用密码 vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
nobody ALL= NOPASSWD:/usr/bin/git
PS:
vim /etc/sudoers 配置完成保存退出即可生效,然后再访问php的脚本就可以成功了
如果需要给多个sudo命令免密可以多个就用逗号隔开:
nobody ALL= NOPASSWD:/usr/bin/git,/usr/local/nginx/sbin/nginx
3、以上即可配置完成~~~~