让WSL开机自启动各类服务

最近,在使用WSL2下的Ubuntu22.04炼丹时,发现WSL本身是不支持systemctl等服务管理方式的,同时也不自带SSH服务。因此,如果在系统内安装了docker以及SSH、Zerotier等服务,这些服务就没办法通过注册service来实现随着WSL子系统开机自启,一开始,我编写了一个shell脚本,尝试通过开机自行运行脚本的方式来是实现开机服务自启。但是第一是不太优雅,第二是效果时灵时不灵,并不算一个很好的解决方案。最后,感谢 Jinzhong Xu 的博客 ,我找到了一个更好的解决方案,具体如下:

1. 新建文件:wsl.vbs,名字自定义,但必须使用 vbs 作为扩展名

2. 在文件中按照以下格式编写vbs脚本:

</p>
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Ubuntu-22.04 -u root /etc/init.d/ssh start", vbhide
ws.run "wsl -d Ubuntu-22.04 -u root zerotier-one -d", vbhide
ws.run "wsl -d Ubuntu-22.04 -u root dockerd", vbhide
<p>

其中,"wsl -d"后面首先填写你需要执行该指令的子系统版本,此处为Ubuntu22.04,之后在 -u 后面填入需要用来执行指令的用户名。我这里需要以root权限执行,那就在这里填入root。后面就接上你需要执行的自启动指令即可。在上面的样例中,我先后执行了ssh、zerotier与docker的自启动。

该方法的本质原理就是通过wsl.exe自带的传入指令运行的方法,首先通过"wsl -d"选定子系统,然后通过"wsl -u"选定执行用户,最后通过wsl主程序向子系统传入指令执行。该方法的优点是双击脚本即可直接一键启动指定子系统并同时启动对应服务在后台。同时,该自启动不影响子系统的原有启动项设置。如果后期不需要这些服务再开机自启,直接删除或重新编辑该脚本即可,方便快捷。

对于需要操作的wsl子系统发行版名称,可以通过在Windows终端执行以下指令来查看:

</p>
PS C:\Users\UserName> wsl -l
适用于 Linux 的 Windows 子系统分发:
Ubuntu-22.04 (默认)
<p>

 

 

本方法由Jinzhong Xu 的博客 提供。原始方案作者:Jinzhong Xu

点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像(暂时停用!)

Title - Artist
0:00