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 启用服务。