为多模块应用程序创建系统服务脚本
Create a systemd service script for multiple module app
我目前正在用 Pyro4 和 Flask 编写一个 python 应用程序分支。
为了启动应用程序,我需要:
- 启动 pyro4 名称服务器
- 在 pyro4 名称服务器中注册我的对象
- 启动一个 flask 网络应用来访问 pyro4 对象
我想使用 systemd 服务文件来执行此操作。
我首先考虑将 ExecStarPre 和 ExecStarPost 用于 运行 pyro4 名称服务器和烧瓶网络应用程序;但似乎这些字段不适用于长运行命令...
我是否需要制作 3 个 systemd 服务,这些服务在我从第 4 个 systemd 服务调用的 bash 脚本中启动?
谢谢你帮助我
我正在尝试编写 systemd 服务文件
你不需要四个systemd服务;三个应该做。
pyro-nameserver.service
:Pyro 名称服务器
mysvc-objects.service
:自定义 Pyro 对象的服务器。使用 Requires=pyro-nameserver.service
和 After=pyro-nameserver.service
mysvc.service
:实际的 Flask webapp。使用 Requires=mysvc-objects.service
和 After=mysvc-objects.service
确保它仅在名称服务器已经启动并且您的对象已注册时才尝试启动。
您应该在任何情况下都不要从ExecStartPre
或ExecStartPost
启用或禁用systemd服务。
顺便说一句,有一点有点棘手的事情是控制 systemd 何时认为某些东西“启动”以便仅在该服务完成初始化并准备好使用后启动链中的下一个服务。在一个完美的情况下,你会用 Type=notify
构建服务, use sd_notify("READY=1")
在它们完成初始化时告诉 systemd 吗?但如果您还没有构建它,可以选择构建一个 ExecStartPost
脚本,该脚本会等到与其关联的服务实际 运行 才会退出。
我目前正在用 Pyro4 和 Flask 编写一个 python 应用程序分支。 为了启动应用程序,我需要:
- 启动 pyro4 名称服务器
- 在 pyro4 名称服务器中注册我的对象
- 启动一个 flask 网络应用来访问 pyro4 对象
我想使用 systemd 服务文件来执行此操作。 我首先考虑将 ExecStarPre 和 ExecStarPost 用于 运行 pyro4 名称服务器和烧瓶网络应用程序;但似乎这些字段不适用于长运行命令...
我是否需要制作 3 个 systemd 服务,这些服务在我从第 4 个 systemd 服务调用的 bash 脚本中启动?
谢谢你帮助我
我正在尝试编写 systemd 服务文件
你不需要四个systemd服务;三个应该做。
pyro-nameserver.service
:Pyro 名称服务器mysvc-objects.service
:自定义 Pyro 对象的服务器。使用Requires=pyro-nameserver.service
和After=pyro-nameserver.service
mysvc.service
:实际的 Flask webapp。使用Requires=mysvc-objects.service
和After=mysvc-objects.service
确保它仅在名称服务器已经启动并且您的对象已注册时才尝试启动。
您应该在任何情况下都不要从ExecStartPre
或ExecStartPost
启用或禁用systemd服务。
顺便说一句,有一点有点棘手的事情是控制 systemd 何时认为某些东西“启动”以便仅在该服务完成初始化并准备好使用后启动链中的下一个服务。在一个完美的情况下,你会用 Type=notify
构建服务, use sd_notify("READY=1")
在它们完成初始化时告诉 systemd 吗?但如果您还没有构建它,可以选择构建一个 ExecStartPost
脚本,该脚本会等到与其关联的服务实际 运行 才会退出。