使用服务命令在 WSL2 中自动启动服务

使用服务命令在 WSL2 中自动启动服务

我有安装了 WSL2 的 Windows 10 和 Ubuntu 20.04。我试图让 mailhog 在后台自动启动,就像 mysql 为我做的那样。

我已经安装了 mailhog,并创建了/etc/systemd/system/mailhog.service一个

[Unit]
Description=MailHog service

[Service]
ExecStart=/home/dzoljom/.phpenv/shims/mailhog \
  -api-bind-addr 127.0.0.1:8025 \
  -ui-bind-addr 127.0.0.1:8025 \
  -smtp-bind-addr 127.0.0.1:1025

[Install]
WantedBy=multi-user.target

在其中。我指向 phpenv 路径,因为我使用 phpenv 来处理不同的 php 版本。不确定这是否是正确的方法,但我已将其复制到该路径,当我在一个终端窗口中手动启动 mailhog 时

/home/dzoljom/.phpenv/shims/mailhog \
  -api-bind-addr 127.0.0.1:8025 \
  -ui-bind-addr 127.0.0.1:8025 \
  -smtp-bind-addr 127.0.0.1:1025

它可以运行并从 Laravel 应用程序捕获我的邮件。

现在,所有教程都说要使用systemctl,但我在 WSL2 上没有它,只有service命令可用。但是当我输入时,service --status-all我没有看到 mailhog 服务可用,而且我无法输入,service mailhog start因为这不是可识别的服务。

这是可以做到的吗,或者我是否需要在需要时手动启动它(此时我可能只会在我的 zshconfig 中为它创建一个快捷方式)?

答案1

简短回答:至少在 WSL 下,你需要“手动”启动它。我说“在 WSL 下”,因为你使用 Windows 任务管理器任务使其在用户登录时出现。只需使用类似以下命令创建任务:

wsl /home/dzoljom/.phpenv/shims/mailhog -api-bind-addr 127.0.0.1:8025 -ui-bind-addr 127.0.0.1:8025 -smtp-bind-addr 127.0.0.1:1025

较长的答案:

需要澄清几点。首先,你说:

让 mailhog 在后台自动启动,mysql 对我的作用是一样的。(强调添加)

如果 MySQL 在 WSL 下运行,它可能会受到同样的限制。WSL init(PID 1)没有像 SysVInit 或 Systemd 那样在启动时运行应用程序或脚本的概念。通过命令wsl(或其较早的兄弟命令之一,如bash.exe)启动时,WSL 实例处于“正在运行”状态。

只要至少有一个“非初始化”进程作为其进程树的子进程运行,它们就会处于“运行”状态。因此,如果您的 shell 正在运行,那就足够了。或者,如果mysqld正在运行,它也会继续运行。

当所有正在运行的进程终止时,WSL 将“停止”该实例,通常在几秒钟内。

我很好奇你是如何让 MySQL“自动”启动的。我们应该能够对 MailHog 使用相同的方法。

其次,您在问题中写的文件是 Systemd 单元文件,而不是服务初始化脚本。在 Ubuntu 下,至少在 WSL 中,许多软件包(例如 MySQL,我相信)仍然包含 SystemVInit 脚本,以便该service命令可以正常工作。您可以在 中找到这些/etc/init.d

WSL 下的一些发行版(例如 openSUSE 或 Debian)已经完全取消了这些,只提供 Systemd 版本。当然,正如你所注意到的,Systemd 不能在 Windows 上运行(至少在没有大量工作的情况下不能运行,如果你愿意,你可以在其他地方搜索)。

但是,如果 MailHog 包没有提供service等效脚本,那么您将无法service像使用 MySQL 那样使用命令来启动它。没关系,正如您所注意到的,完全可以通过其可执行文件运行守护进程。无论如何,这通常是 Systemd 单元文件或 SysVInit 脚本的最终结果。

你也可以通过简单的网络搜索找到旧的 MailHog 初始化脚本。以下是一个例子我找到了。不能保证它的效果如何,但至少你可以用它作为起点。然后你可以service像使用 MySQL 一样使用该命令。

这至少会使某件事成为service mailhog status || service mailhog start可能——这是“如果 mailhog 没有运行,则启动它”的简写。

相关内容