我可以使用 systemd 运行 多个进程(每个进程都有不同的端口)吗?

Can i run multiple processes (each with different port) using systemd?

我有以下 supervisord 配置(从 this answer 复制):

[program:myprogram] 
process_name=MYPROGRAM%(process_num)s
directory=/var/www/apps/myapp 
command=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%(process_num)s
startsecs=2
user=youruser
stdout_logfile=/var/log/myapp/out-%(process_num)s.log
stderr_logfile=/var/log/myapp/err-%(process_num)s.log
numprocs=4
numprocs_start=14000

我可以用 systemd 做同样的事情吗?

一个 systemd 单元可以包含 specifiers,它可用于编写将被实例化多次的通用单元服务。

基于您的 supervisord 配置的示例:/etc/systemd/system/mydaemon@.service:

[Unit]
Description=My awesome daemon on port %i
After=network.target

[Service]
User=youruser
WorkingDirectory=/var/www/apps/myapp
Type=simple
ExecStart=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%i

[Install]
WantedBy=multi-user.target

然后您可以使用示例启用/启动该服务的多个实例:

# systemctl start mydaemon@4444.service

包含更多关于 Fedora 示例的文章 Magazine.org:systemd: Template unit files