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