【问题标题】:Convert Upstart config with dynamic instances to Systemd service将带有动态实例的 Upstart 配置转换为 Systemd 服务
【发布时间】:2017-01-13 16:24:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    systemd 支持模板,这些模板可用于使用单个模板启动服务的多个实例。来自man systemd.unit 中的文档:

    可选地,可以在 runtie 中从模板文件中实例化单元。这允许创建 来自单个配置文件的多个单元。如果 systemd 查找单元配置文件,它 将首先在文件系统中搜索文字单元名称。如果 tat 没有成功并且单元名称包含一个“@”字符,systemd 将寻找一个具有相同名称但 删除了实例字符串(即“@”字符和后缀之间的部分)。示例:如果 请求了一个服务 getty@tty3.service 并且没有找到该名称的文件,systemd 将寻找 getty@.service 并从该配置文件中实例化一个服务(如果找到)。

    要从配置文件中引用实例字符串,您可以在许多配置选项中使用特殊的“%i”说明符。

    在您的情况下,为动态参数“c”和“b”启动服务可能如下所示:

     systemctl start myservice@b-c.service
    

    由于 systemd 仅支持实例名称中的一个变量,您可能需要编写包装器 shell 脚本,将实例名称“b-c”解包为分隔“b”和“c”的值以传递给您的底层服务。

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2016-01-07
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2017-10-23
      • 2018-04-04
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多