systemd - 如何运行多个命令 systemd

标签 systemd

我想在 systemd 的 myapp.service 文件中使用多个命令

[Unit]
Description=to serve myapp

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/myapp
ExecStart=/home/ubuntu/.local/bin/pserve production.ini http_port=5000
ExecStart=/home/ubuntu/.local/bin/pserve production.ini http_port=5001
Restart=always

[Install]
WantedBy=multi-user.target

它抛出错误说参数无效。 我想运行两个命令

pserve production.ini http_port=5000
pserve production.ini http_port=5001

我该怎么做?

最佳答案

您可以从一个 systemd 单元启动多个后台进程,但 systemd 将无法为您跟踪它们并执行它为支持守护进程所做的所有好事,例如在各种系统事件或需要时自动重启。

如果您必须将其作为一个单元,那么您可以执行以下操作之一(按我的偏好顺序):

  • 使两台服务器成为独立的单元(请注意,您可以为两者使用相同的配置文件,因此它们是同一服务的两个“实例”——这是有道理的,它们运行同一台服务器)。当您运行“systemctl”时,您将在正在运行的服务列表中有两个条目。

  • 使该单元成为一次性的(运行退出且不受监视和重新启动的程序)。使一次性命令在后台启动两个服务器,例如,

    sh -c "{ pserve production.ini http_port=5000 & pserve production.ini http_port=5001 & } /dev/null >&1"

  • 制作一个脚本来启动守护进程并监视它们,如果需要重新启动它们,并在它自己被杀死时杀死它们。然后将该脚本设置为 systemd 运行的“守护进程”。不值得,IMO - 因为您正在做 systemd 本身最适合做的大部分工作。当然,您可以创建一个新的 systemd 副本,该副本被配置为仅运行这两个服务器(并将该 systemd 设置为您的“一个服务换两个命令”单元),但这似乎有点过头了。

关于systemd - 如何运行多个命令 systemd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51068605/

相关文章:

erlang - 有没有办法阻止 Erlang 服务器自动启动 epmd?

Systemd 服务未启动我的应用程序

chef-infra - 使用 Chef 时如何重新加载 systemd 服务

ubuntu-16.04 - Systemd + Sys V init.d 脚本 : start works, 但停止不

linux - %H :%i. pid 在 .service 文件中做什么?

linux - 系统延迟启动日历事件或等待其他服务的启动时间

c - g_dbus_proxy_new_for_bus_sync : assertion 'g_variant_is_object_path (object_path)' failed

centos - 如何更改 systemd 单元文件目录?

docker - 在一台机器上模拟的服务器和客户端网络应用

linux - 具有 shell 扩展的 Systemd 单元配置