使用不同的参数运行多个服务

使用不同的参数运行多个服务

我制作了一个 python 脚本来处理一些我想作为服务运行的数据。该脚本正在处理数据,然后休眠一段时间以处理传入的新数据。

我的问题是,我想运行该服务的多个实例,因为我有几个不同的数据源需要处理,而我的脚本当时是为了处理一个数据源。

我看到了几种不同的方法:

我可以重写脚本来处理所有数据源 - 这将使其无法用于临时使用,并且还会使更新数据源集变得更加困难,因为不可能自动发现已添加或删除的源,所以即使有可能,这是我最不喜欢的选择。

我可以在 bash 或 python 中创建一个包装器脚本,为我想要处理的数据源启动脚本。这也感觉有点笨拙。

我可以为每个数据源创建一个单元文件,每个单元文件使用适当的参数调用处理脚本,这将为我提供许多系统文件,即processing_ds1.system、processing_ds2.system等。对我来说,这感觉像是一种可能的方式,除非有充分的理由不这样做。

我的首选方法是创建一个系统文件,可以使用每个数据源的参数调用该文件,也可以启动系统文件中的所有实例。

所以我有两个选择:

如何在单元文件中使用参数?我见过postgresql可以使用@启动不同的版本,即

systemctl start postgres@12-main

启动集群 12-main。但这是如何做到的呢?我找不到 postgresql 的任何有用的单元文件。

或者

是否可以并且建议从一个单元文件启动多个服务?

答案1

您可以使用模板单元文件:系统单元

以 OpenVPN 为例:您可以创建一个名为[email protected]in 的单元文件/etc/systemd/system,内容如下:

[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

每次运行 systemctl start openvpn@myconfig systemd 都会将单元文件中的 %i 替换为“myconfig”。所以你运行 /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf

相关内容