0

我目前正在用 Pyro4 和烧瓶编写一个 python 应用程序。为了启动我需要的应用程序:

  1. 启动 pyro4 名称服务器
  2. 在 pyro4 名称服务器中注册我的对象
  3. 启动一个烧瓶网络应用程序来访问 pyro4 对象

我想用一个 systemd 服务文件来做到这一点。我首先使用 ExecStarPre 和 ExecStarPost 来运行 pyro4 名称服务器和烧瓶网络应用程序;但似乎这些字段不适用于长时间运行的命令......

我是否需要创建 3 个 systemd 服务,这些服务在我从第 4 个 systemd 服务调用的 bash 脚本中启动?

谢谢帮助我

我正在尝试编写一个 systemd 服务文件

4

1 回答 1

1

您不需要四个 systemd 服务;三应该做的。

  • pyro-nameserver.service: Pyro 名称服务器
  • mysvc-objects.service:您的自定义 Pyro 对象的服务器。使用Requires=pyro-nameserver.serviceAfter=pyro-nameserver.service
  • mysvc.service: 实际的 Flask webapp。使用Requires=mysvc-objects.serviceandAfter=mysvc-objects.service确保它仅在名称服务器已经启动并且您的对象已注册时才尝试启动。

在任何情况下,您都不应该从一个ExecStartPre或一个ExecStartPost.

顺便说一句,有一点有点棘手的是控制 systemd 何时认为某些东西“启动”,以便仅在该服务完成初始化并准备好使用后启动链中的下一个服务。在完美的情况下,您会构建用于Type=notify告诉systemd 何时完成初始化的服务;但是,如果您还没有构建它,则可以选择构建一个脚本,该脚本会等到与其关联的服务实际运行后再退出。sd_notify("READY=1")ExecStartPost

于 2022-02-14T00:54:19.263 回答