如何在systemd下运行多个命令

4
我想在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

我该怎么做呢?
1个回答

7
您可以从一个systemd单元启动多个后台进程,但systemd无法跟踪它们并完成所有支持守护程序的良好工作,例如在各种系统事件上向其发送信号或在需要时自动重新启动它。
如果必须将其作为单个单元,则可以执行以下操作之一(按我的喜好顺序):
- 使两个服务器成为单独的单元(请注意,您可能可以使用相同的配置文件来运行这两个服务器,因此它们是同一服务的两个“实例” - 这是有意义的,它们运行相同的服务器)。运行'systemctl'时,您将在正在运行的服务列表中看到两个条目。 - 将该单元设置为一次性单元(运行退出且未监视和重启的程序)。让一次性命令在后台启动两个服务器,例如, sh -c "{pserve production.ini http_port = 5000 & pserve production.ini http_port = 5001 &}< / dev / null> / dev / null>& 1" - 制作一个启动两个守护进程并监视它们,在需要时重启它们并在自己被杀死时杀死它们的脚本。然后将该脚本设置为systemd运行的“守护程序”。我认为不值得,因为您正在做systemd自身最擅长的大部分工作。当然,您可以启动一个新的配置为仅运行这两个服务器的systemd的副本(并将该systemd作为您的“一个服务对应两个命令”的单位),但那似乎有些过度了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接