如何迭代systemd中的序列?

时间:2017-04-14 00:16:34

标签: ubuntu-16.04 systemd

我们正在从ubuntu 14迁移到ubuntu 16。

我有以下新手任务:

description "Start multiple Resque workers."
start on runlevel [2345]
task
env NUM_WORKERS=4
script
  for i in `seq 1 $NUM_WORKERS`
  do
    start resque-work-app ID=$i
  done
end script

正如你所看到的,我有4名工人,我已经开始了。然后有一个新手脚本启动这些工作人员中的每一个:

description "Resque work app"
respawn
respawn limit 5 30
instance $ID
pre-start script
  test -e /home/opera/bounties || { stop; exit 0; }
end script
exec sudo -u opera sh -c "<DO THE WORK>"

我如何在systemd中做类似的事情?我特别感兴趣的是如何迭代4的序列,并为每个序列启动一个工人 - 这样,我就有了4个工人的集群。

1 个答案:

答案 0 :(得分:1)

systemd没有迭代语法,但它仍然具有帮助解决此问题的功能。 systemd提供的相关概念是:

  • 目标单位,允许您将相关的服务组视为单个服务。
  • 模板单元,允许您根据ID等变量轻松启动应用程序的新副本。

使用systemd,您可以运行一次性bash循环作为设置服务的一部分,该服务将启用所需数量的工作人员:

for i in `seq 1 4`; { systemctl enable resque-work-app@1; }

假设您有一个resque-work-app@.service文件,其中包含以下内容:

 [Install]
 WantedBy=resque-work-app.target

而且你有一个resque-work-app.target,其中包含:

[Unit]                                                                                                                                                                  
Description=Resque Work App                                                                                                                                         

[Install]                                                                                                                                                               
WantedBy=multi-user.target

另见