Win10 子系统 WSL 开机启动服务

文章来源:https://www.yuque.com/hhun/code/wsl2_run

Linux 中创建执行脚本

脚本路径 /etc/init.wsl

脚本内容

#! /bin/sh
/etc/init.d/cron $1
/etc/init.d/ssh $1

/etc/init.d/bt $1
/etc/init.d/nginx $1
/etc/init.d/php-fpm-56 $1
/etc/init.d/php-fpm-73 $1
/etc/init.d/mysqld $1
/etc/init.d/redis $1
/etc/init.d/pure-ftpd $1

给予脚本执行权限

sudo chmod +x /etc/init.wsl

开机自动启动服务器

1、在Win10创建vbs脚本

脚本文件名 Linux_run.vbs

脚本内容

Set ws = WScript.CreateObject("WScript.Shell")

ws.run "wsl -d Ubuntu-20.04 -u root /etc/init.wsl restart"

Ubuntu-20.04 为子系统分支版本。

restart 为运行动作,其他动作:stop 停止 | start 启动 | restart 重启。


2、设置Win10开机启动项

Windows 下 Win+R 输入 shell:startup

Linux_run.vbs 拖入到打开的文件夹中,Win10开机便会自动启动。

WSL开启自动启动.png


手动管理服务器

该方式不能开机自动启动,可以自由选择执行动作。

Bat批命令脚本下载:

WSL子系统服务器管理 v1.1.bat.zip

使用时需要把脚本文件里面的 Ubuntu-20.04 改为您的子系统分支版本。

WSL子系统服务器管理.png


Unix格式转换

在Windows中写好shell脚本测试正常,但是上传到 Linux 上以脚本方式运行命令时提示 No such file or directory 错误,那么一般是文件格式是dos格式的缘故,改成unix格式即可。


1、在Windows下转换  

利用一些编辑器如 UltraEdit 或 EditPlus 等工具先将脚本编码转换,再放到Linux中执行。

UltraEdit转换方式:File -> Conversions -> DOS -> UNIX 即可。


2、在Linux中的权限转换

首先要确保文件有可执行权限

#chmod u+x filename

然后修改文件格式

#vi filename


3、方法三

用vim打开该sh文件,输入:

:set ff

回车,显示fileformat=dos,重新设置下文件格式:

:set ff=unix

保存退出:

:wq

再执行,竟然可以了。


三种方法都可以方便快速的解决关于Linux执行.sh文件,提示No such file or directory这个问题了。


所以,程序尽量在Linux下编写,迁移时能避免很多意想不到的问题。


启动WSL服务

cmd命令

wsl -u root -d Ubuntu-20.04 service cron restart
wsl -u root -d Ubuntu-20.04 service ssh restart

wsl -u root -d Ubuntu-20.04 service bt restart
wsl -u root -d Ubuntu-20.04 service nginx restart
wsl -u root -d Ubuntu-20.04 service php-fpm-56 restart
wsl -u root -d Ubuntu-20.04 service php-fpm-73 restart
wsl -u root -d Ubuntu-20.04 service mysqld restart
wsl -u root -d Ubuntu-20.04 service redis restart
wsl -u root -d Ubuntu-20.04 service pure-ftpd restart

Ubuntu-20.04 为子系统分支版本。

Linux命令

sudo service cron restart
sudo service ssh restart

sudo service bt restart
sudo service nginx restart
sudo service php-fpm-56 restart
sudo service php-fpm-73 restart
sudo service mysqld restart
sudo service redis restart
sudo service pure-ftpd restart