将具有动态实例的Upstart配置转换为Systemd服务

时间:2017-01-13 16:24:15

标签: service ubuntu-16.04 systemd upstart ubuntu-server

我有一个可以运行多个实例的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

1 个答案:

答案 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"传递给您的基础服务。