我想在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
我该怎么做?
答案 0 :(得分:3)
您可以从一个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用作“两个命令的一个服务”单元),但这似乎是一个过大的选择。