环境
服务器:ubuntu18.04;
laravel版本:Laravel8.83.27;
PHP版本:7.4.33;
Nginx版本:1.22.1;
MySQL版本:5.7.34;
Redis版本:7.0.11;
调用
// 获取网关
$resultStr = shell_exec('ip route | grep default');
preg_match('/\d+\.\d+\.\d+\.\d+/',$resultStr,$gateway);
# $gateway[0]就是获取后的网关,博主暂时用不上
shell_exec("/www/wwwroot/test/app/Extend/Shell/update_ip.sh ". env('APP_IP') ." " . $ip);
参数 | 说明 |
---|---|
env(‘APP_IP’) | 项目的原始IP |
$ip | 要调整后的IP |
$gateway[0] | 当前服务器的网关 |
sh脚本源码
#!/bin/bash
# 修改nginx配置文件
sudo sed -i '4s/'"$1"'/'"$2"'/g' /www/server/panel/vhost/nginx/192.168.16.196.conf
# 修改公共配置文件
sudo sed -i 's/'"$1"'/'"$2"'/g' /www/wwwroot/monitoring/.env
# 清除配置缓存
cd /www/wwwroot/monitoring && /www/server/php/74/bin/php artisan config:clear
# 重启队列服务
cd /www/wwwroot/monitoring && /www/server/php/74/bin/php artisan queue:restart
# 重启Nginx服务
sudo /etc/init.d/nginx restart
# 修改网络配置
sudo nmcli connection modify "有线连接 1" ipv4.method 'manual' ipv4.addr "$2/24"
# 应用更改以使新的网络配置生效
sudo nmcli connection up "有线连接 1"
参数 | 说明 |
---|---|
$1 | sh脚本传的第一个参数,在这里就是 shell_exec 函数传的第一个参数 |
$2 | sh脚本接受的第二个参数,在这里就是 shell_exec 函数传的第二个参数 |
有线连接 1 | 服务器网卡的名称 |
4s | s 前面加数字代表只替换某一行,这里就是只替换该文件的第四行的匹配项,反之不加则替换当前文件所有的匹配项 |
Tip:源码中的路径均为对应服务所在的路径,请根据自己的实际情况进行替换哈!!!
注意事项
-
去对应的
PHP
版本打开shell_exec
函数,然后重启PHP
服务 -
在服务器里面去开放
www
用户的权限,具体操作可参考博主的另一篇博客: PHP使用shell_exec()函数调用Linux系统级别的指令提示权限不足 -
nginx
配置文件要注意权限问题 (602)
特别感谢
- 参考博客:ubuntu修改网络配置并生效?