win10 子系统(wsl) 开机启动以及启动脚本

最近电脑重装了系统, 所以 win10 子系统(wsl)也得重新安装, 配置环境. 这次重装后想结合 VSCode 的远程开发功能和 win10 的子系统, 实现一次配置环境, 不用每次重装系统后都要花很多时间配置系统环境.

因为子系统不支持 systemd, 自然就无法通过 systemctl enable xxx 来实现服务或者程序的开机启动了. 网上搜了一圈, 基本上都是通过新建 vbs 脚本来实现开机启动, 我这里用的是系统的计划任务来实现.

设置步骤

1. Ubuntu 下新建开机脚本

1
vi ~/.init.sh
1
2
3
4
5
#!/bin/sh
/etc/init.d/mongodb start
/etc/init.d/redis-server start
/etc/init.d/ssh start
# 脚本内容根据你的实际服务设置

2. 设置 sudo 免密执行开机脚本

1
sudo vi /etc/sudoers # 此处需要输入当前用户密码

在文件尾部输入以下内容

1
your_user_name ALL=(ALL:ALL) NOPASSWD:/home/your_user_name/.init.sh

一定要在文件末尾, 否则会被前面组权限部分覆盖

完全退出子系统, 然后 sudo 执行脚本, 测试是否已经免密

1
sudo /home/your_user_name/.init.sh

此处一定要完全退出并打开子系统, 否则编辑 /etc/sudoers 时输入的密码会有缓存, 测试结果有误

3. 新建计划任务

回到 win10

  1. WIN + S 打开搜索面板, 输入 task 搜索并打开计划任务.

  2. 创建任务

    1. 触发器选择启动时

    2. 操作选择启动程序

      程序或脚本: C:\Windows\System32\bash.exe
      添加参数: -c 'sudo /home/your_user_name/.init.sh'

    3. 其他条件之类的, 根据你的情况设置

结语

重点在于计划任务的 触发条件 以及启动程序的 参数. 在子系统内的设置注意设置 免密执行脚本 即可.