使用runit仅启动服务而不是监督

时间:2013-06-11 01:44:24

标签: amazon-ec2 chef init unicorn runit

我有一个EC2设置,我有一个厨师脚本,用独角兽设置一个rails应用程序。由于我正在使用application_ruby脚本,它使用runit在启动时启动Unicorn,我遇到了这个问题,我需要在使用sudo sv once app启动后手动禁用runit。否则,runit将干扰Unicorn的零停机部署,并开始产生新的独角兽主机,这些主机会一直出错,这反过来会阻止未来的Unicorn重启。

所以我一直在寻找一种方法让runit只启动初始的Unicorn实例然后不监督它,因此当部署脚本重新启动原始实例时,它不会自动生成新的Unicorn实例。目前,我的/etc/sv/app/run如下所示:

#!/bin/bash

cd /home/deployer/app/current

exec 2>&1
exec /usr/bin/chpst \
  -u deployer:deployer \
  bundle exec \
  unicorn \
 -E production \
 -c /etc/unicorn/app.rb

我现在要做的是手动调用sudo sv once app以防止runit稍后吓坏,但我不想手动执行此操作。我尝试将sv once app添加到/etc/sv/app/run的末尾,但这没有效果。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以直接从运行脚本中调用sv o app,将其更改为预期的模式。修改您拥有的内容:

#!/bin/bash

cd /home/deployer/app/current
sv o app
exec 2>&1
exec /usr/bin/chpst \
  -u deployer:deployer \
  bundle exec \
  unicorn \
 -E production \
 -c /etc/unicorn/app.rb