如何在 WSL2 上启动 Ubuntu 时启动特定服务

如何在 WSL2 上启动 Ubuntu 时启动特定服务

sudo service postgresql start每次我在 WSL2 上启动 Ubuntu 时都需要运行。

如何让该服务在启动 Ubuntu 时自动启动?

WSL 不使用 systemd,因此sudo systemctl enable postgresql不起作用。

$ sudo systemctl status postgresql
System has not been booted with systemd as init system (PID 1). 
Can't operate. Failed to connect to bus: Host is down

是否有一个标准的方法可以在启动时启动服务?

编辑

我想在 Ubuntu 启动时启动该服务,而不是在 Windows 启动时启动该服务。

答案1

随着 Windows 11 的最新发布,有两种首选方法可以实现此目的。

Windows 11

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

[boot]
command="service postgresql start"

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

Windows 10

在 Windows 10 的 WSL 上,在我看来,还有一种更简单的方法,而不是sudo在启动时输入命令并担心sudoers

sudoers当然是在 Ubuntu 上执行此操作的规范方法(没有双关语的意思,只是一个意外),但在 WSL 上使用以下语法更容易~/.bashrc

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

wsl.exe -u root不需要密码。从 PowerShell 和 CMD,无需 即可调用它exe,但从 WSL 内部则需要扩展。

请注意,每@mbomb007的评论,每次启动时都会生成一条或两条消息。要禁止此操作,请使用:

wsl.exe -u root service postgresql status > /dev/null || wsl.exe -u root service postgresql start > /dev/null

答案2

至少截至 2023 年 3 月,WSL2 现已支持 systemd(关联),同样适用于 Windows 10。只需输入

[boot]
systemd=true

在您的 /etc/wsl.conf 中。重启后,您可以通过 systemctl 启用服务。

相关内容