如何通过WSL配置文件实现启动时自动运行指定脚本?
解决WSL启动脚本不执行的问题
问题排查与修复步骤
1. 清理重复配置,选择正确的配置文件
.wslconfig(Windows端全局配置)和/etc/wsl.conf(分发版内配置)同时设置boot.command会导致冲突,建议只保留分发版内的配置:
- 删除
C:\Users\reynadan\.wslconfig中的[boot]段落,或者用#注释掉相关内容。 - 确保
/etc/wsl.conf的配置唯一且正确:[boot] command=bash /home/reynadan/scripts/startup.sh
2. 给脚本添加可执行权限
WSL启动时无法执行无权限的脚本,执行以下命令赋予权限:
chmod +x /home/reynadan/scripts/startup.sh
3. 修正脚本中的权限问题
/etc/wsl.conf的boot.command是以root用户执行的,脚本中无需再用sudo调用dockerd,否则会因无交互输入密码而失败:
修改脚本中的Docker启动部分:
# 原代码 sudo dockerd > /dev/null 2>&1 & # 修改为 dockerd > /dev/null 2>&1 &
4. 确保wsl.exe调用正常
root用户环境下可能无法直接找到wsl.exe,建议改用绝对路径调用:
修改脚本中启动wsl-vpnkit的部分:
# 原代码 wsl.exe -d wsl-vpnkit service wsl-vpnkit start # 修改为 /mnt/c/Windows/System32/wsl.exe -d wsl-vpnkit service wsl-vpnkit start
5. 手动测试脚本是否正常
先手动执行脚本,验证功能是否正常:
bash /home/reynadan/scripts/startup.sh
检查/home/reynadan/wslBootHistory.txt是否生成日志,并用ps aux | grep dockerd确认Docker是否启动,排查脚本本身的逻辑问题。
6. 验证配置生效
执行wsl --shutdown,等待10秒后重启WSL,再次检查日志文件和Docker状态。
内容的提问来源于stack exchange,提问作者Reynadan
相关产品推荐
相关产品推荐

