如何使 Dart/Aqueduct 永久运行

Mar*_*ira 1 dart aqueduct

我是 Dart lang 的新手,也是 Linux 上 API 服务的新手。
我的问题是,如何在 Linux 中保持 Dart 服务处于活动状态?如果服务出现问题,我该如何回收?

我需要在 crontab 中运行吗?

jul*_*101 6

您可以为 Aqueduct 创建一个 systemd 服务,并使其在服务器启动时自动运行。systemd 服务有很多选项,但我尝试根据您的要求为您制作一个示例:

[Unit]
Description=Dart Web Server
Wants=network-online.target
After=network-online.target

[Service]
Restart=always
ExecStart=/opt/dart-sdk/bin/dart bin/main.dart
WorkingDirectory=/tmp/web/my_project
User=webserver_user

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

将其保存为 /etc/systemd/system/name_of_your_service.service

此后运行以下命令:

  • systemctl 守护进程重新加载
    • 这将确保对可用服务的最新更改加载到 systemd 中。
  • systemctl start name_of_your_service.service
    • 这将启动您的服务。您可以使用“停止”停止它并使用“重新启动”重新启动它。
  • systemctl 启用 name_of_your_service.service
    • 这将启用该服务,以便它在引导后启动。您也可以“禁用”它。

另一个好的命令是 status 命令,您可以在其中查看有关服务的一些信息(例如它是否正在运行?)以及一些最新的日志事件(来自标准输出):

systemctl status name_of_your_service.service

让我看一下我指定的设置:

  • “Wants”/“After”确保服务在建立网络连接后首先启动(主要与服务应在启动顺序下启动的时间相关)。
  • “Restart”指定如果 dart 进程在不使用“systemctl stop”的情况下停止时会发生什么。使用“始终”,无论程序如何终止,服务都会重新启动。
  • “ExecStart”我们要继续运行的程序。
  • “用户”是您希望服务运行的用户。
  • “WantedBy”部分与“systemctl enable”部分相关,并指定何时应启动服务。除非您有某些特定要求,否则请在此处使用 multi-user.target。

同样,systemd 服务有很多选项,如果您想查看服务的 stdout 日志输出,您还应该查看 Journalctl。