如何使用 WSL 配置文件在 WSL 启动时运行命令?

Rey*_*dan 1 bash windows-subsystem-for-linux wsl-2

我在 WSL设置文件中添加了这些行

C:\Users\reynadan\.wslconfig

[boot]
command=bash /home/reynadan/scripts/startup.sh
Run Code Online (Sandbox Code Playgroud)

/etc/wsl.conf

[boot]
command=bash /home/reynadan/scripts/startup.sh
Run Code Online (Sandbox Code Playgroud)

/home/reynadan/scripts/startup.sh

[boot]
command=bash /home/reynadan/scripts/startup.sh
Run Code Online (Sandbox Code Playgroud)

我关闭并wsl --shutdown等待了超过 8 秒才再次运行它,但/home/reynadan/wslBootHistory.txt仍然是空的并且 docker 没有运行。

如何确保 WSL 在启动时运行我的脚本?

Not*_*1ds 5

正如评论中所述,您使用的是 Windows 10。但是,评论中的信息有点过时 - 该boot.command功能现在可以在 Windows 10 上运行,但您需要两个 Windows 10 的绝对最新版本(包括可选更新)并安装了 WSL。

首先,确认您的系统正在运行 11 月的“累积更新预览”。如果是,那么您的 UBR(更新-构建-修订)将是 2311 或更高。来自 PowerShell:

(Get-ComputerInfo).WindowsUBR
Run Code Online (Sandbox Code Playgroud)

如果低于 2311,则:

  • 首先,确保您的系统完全是最新的。
  • 转到“设置” -> “检查更新”,然后按“检查更新”按钮。
  • 如果您在 Windows 10 上进行了完全更新(但运行的版本仍低于UBR 2311),您应该会看到“适用于基于 x64 的系统的 Windows 10 版本 22H2 的 2022-11 累积更新预览 (KB5020030)”作为可选更新提供。安装它并在出现提示时重新启动。

完成此操作后,您现在应该能够通过简单的操作更新到 WSL 的应用商店版本:

wsl --update
wsl --version
Run Code Online (Sandbox Code Playgroud)

更新后,您应该位于:

WSL version: 1.0.0.0
Run Code Online (Sandbox Code Playgroud)

...或者稍后。

建议此时重新启动以使所有功能正常工作,但并非严格要求。

此时,您应该可以使用 的/etc/wsl.conf功能[boot].command

如果由于某种原因它仍然无法正常工作,那么我建议从等式中删除该脚本以进行故障排除。尝试类似的操作command=service cron start,看看重新启动 WSL 时 Cron 服务是否启动。

请注意,此新更新还为 Windows 10 用户带来了许多其他新的 WSL2 功能,包括:

  • 系统支持
  • WSLg:在 WSL2 中运行 Linux GUI 应用程序的能力
  • --mount添加额外 Windows 驱动器和分区(包括具有其他文件系统甚至原始分区的驱动器和分区)的论点。