如何让服务随 WSL2 启动?

如何让服务随 WSL2 启动?

如何启用诸如 OpenSSH 服务器之类的服务以在 WSL2 启动时启动?目前,每次使用 启动 WSL2 时,我都必须重新启动它sudo service ssh start

答案1

WSL 启动时运行任何服务的首选方式取决于您的 Windows 版本:

Windows 11

/etc/wsl.conf现在,您可以通过以下命令创建/编辑(通过 sudo)来启动实例时执行任意命令行:

[boot]
command="service ssh start"

此命令以 root 身份运行,不生成任何输出。如果您需要运行多个命令,则它们应该在字符串内以分号分隔(或类似&&command=

更新:在我看来,此功能存在错误这将导致 WSL 实例在未使用时终止,即使以 启动的进程boot.command仍在运行。对于许多用户来说,这可能不是问题,因为您可能正在运行该实例,并在退出 shell 时注意或关心它是否停止,但您应该注意这种行为。

Windows 10

在 Windows 10 的 WSL 上,您需要通过用户的其中一个 shell 启动脚本来启动该服务。

在您的中使用以下语法~/.bash_profile

 wsl.exe -u root service ssh status || wsl.exe -u root service ssh start

wsl.exe -u root其优点是sudo每次启动时都不需要输入密码。从 PowerShell 和 CMD 中,无需使用 即可调用它exe,但从 WSL 内部调用则需要使用扩展。

当然,您也可以使用sudoers它来抑制对密码的要求,但是 WSL 使得这变得没有必要。

请注意,每次启动时都会生成一条或两条消息。要禁止此操作,请使用如下语法:

wsl.exe -u root service ssh status > /dev/null || wsl.exe -u root service ssh start > /dev/null
其他选择

这些方法用于运行命令当 WSL 启动时,这是一个相当简单的案例。在其他超级用户问题中,还有更复杂的变体,这些变体将:

  • 当 Windows 用户登录时运行
  • 在 Windows 计算机启动时运行

相关内容