1

我是 Dart lang 的新手,也是 Linux 上 API 服务的新手。
我的问题是,如何在 linux 中保持 Dart 服务处于活动状态?如果我的服务有问题,我该怎么做才能回收?

我需要在 crontab 中运行吗?

4

1 回答 1

4

您可以为您的 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

将此另存为 /etc/systemd/system/name_of_your_service.service

此后运行以下命令:

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

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

systemctl status name_of_your_service.service

让我看看我指定的设置:

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

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

于 2019-08-30T21:37:09.510 回答