我有一个可以运行多个实例的Upstart服务。可以任意组合指定两个动态参数。
有没有办法将其转换为systemd .service文件?
start on (net-device-up and local-filesystems and runlevel [2345])
stop on runlevel [016]
instance $C,$B
exec [...] $C $B
respawn
答案 0 :(得分:2)
systemd支持可用于使用单个模板启动服务的多个实例的模板。来自man systemd.unit
中的文档:
可选地,可以在runtie处从模板文件中实例化单元。这允许创建 单个配置文件中的多个单元。如果systemd看起来是单位配置文件,那么 将首先在文件系统中搜索文字单元名称。如果tat没有成功,单位名称包含" @" system,systemd将寻找一个共享相同名称的unittemplate但是 用实例字符串(即" @"字符和后缀之间的部分)删除。示例:if 请求服务getty@tty3.service并且没有找到该名称的文件,systemd将查找 getty @ .service并从该configuratin文件中实例化一个服务(如果找到)。
要从配置文件中引用实例字符串,您可以使用特殊的"%i"许多配置选项中的说明符。
在您的情况下,启动动态参数服务" c"和" b"可能看起来像:
systemctl start myservice@b-c.service
由于systemd仅支持实例名称中的一个变量,因此您可能需要编写解包器shell脚本,该脚本解包实例名称" b-c"分离" b"的值和" c"传递给您的基础服务。