在wsl中自启动一些命令,特别是还要在主机中映射,这些设置特别麻烦
这里换个思路,自启动可能各个版本或系统都不一样,那么我可以根据系统来写个脚本不就可以了
环境:win11+wsl-ubuntu22.04
需要:搭建ubuntu中启动lnmp环境
前提:已经安装好了宝塔和lnmp
win中批处理脚本为bat,映射命令为netsh,如果没有需要自行安装
ubuntu中脚本为sh,需要先查出这里的IP映射到win主机中
如下所示(生成脚本:start.sh,这个脚本生成startUbuntu.bat文件并执行):
当然这里也可以直接在.sh中执行命令不需要生成.bat文件.
#/bin/bash
echo "开启宝塔面板及其相关启动项:bt、nginx、mysqld、redis、php"
echo "bt启动:"
/etc/init.d/bt start
echo "nginx启动:"
/etc/init.d/nginx start
echo "mysqld启动:"
/etc/init.d/mysqld start
echo "redist启动:"
/etc/init.d/redis start
echo "php启动:"
/etc/init.d/php-fpm-73 start
/etc/init.d/php-fpm-74 start
echo ""
#当前主机映射设置
echo "当前宿主机映射设置如下: "
netsh.exe interface portproxy show all
#获取WSL中Ubuntu的内网IP
IP="$(hostname -I | awk '{print $1}')"
echo "本次虚拟IP为: $IP"
#.bat根目录地址,位置我这里取的是cmd启动时默认路径,也可以自己随便指定
path='/mnt/c/Users/AreoW/startUbuntu.bat'
echo "设定的目录文件为: $path"
#判断文件夹是否存在 -d
if [[ ! -f "$path" ]]; then
echo "文件不存在"
else
echo "文件存在,删除文件"
sudo rm -rf $path
fi
echo "创建文件$path"
#创建文件
sudo touch $path
if [[ -f "$path" ]]; then
#给文件权限
echo "创建文件成功,赋予权限"
sudo chmod 777 $path
else
echo "创建文件失败,退出"
exit
fi
#写入内容
arrport=(80 22 443 3306 6379 8888 9000 9501)
#循环生成内容并写入到文件
for var in ${arrport[@]};
do
#删除原本的端口映射设置
d="netsh.exe interface portproxy delete v4tov4 listenport=$var listenaddress=0.0.0.0"
#新建端口映射这是,这里默认ubuntu和主机的端口都是一样的
c="netsh.exe interface portproxy add v4tov4 listenport=$var listenaddress=0.0.0.0 connectport=$var connectaddress=$IP"
echo $d >>$path
echo $c >>$path
done
$path
echo "文件写入内容成功,执行结果如下: "
#执行bat文件
netsh.exe interface portproxy show all
#以下是相关命令
#如果在win的cmd或Powershell中手动映射端口,则执行命令如下格式:
##删除原本映射端口配置,netsh不行试试netsh.exe ,或者是没安装就“百度一下”
# netsh interface portproxy delete v4tov4 listenport=9000 listenaddress=0.0.0.0
##新增端口映射配置
# netsh interface portproxy add v4tov4 listenport=9000 listenaddress=0.0.0.0 connectport=9000 connectaddress=172.21.225.15
##查看端口映射情况
# netsh interface portproxy show all
参考:我的私人博客=>大燕峰博客tper.pdy
执行效果类似: