Amazon ec2 使用runit仅启动服务,而不进行监督

Amazon ec2 使用runit仅启动服务,而不进行监督,amazon-ec2,chef-infra,init,unicorn,runit,Amazon Ec2,Chef Infra,Init,Unicorn,Runit,我有一个EC2设置,其中我有一个chef脚本,可以用unicorn设置rails应用程序。由于我使用的脚本用于在引导时启动Unicorn,因此我遇到了这个问题,需要在引导后使用sudo sv once app手动禁用runit。否则,runit将干扰Unicorn的零停机部署,并开始生成新的Unicorn主机,以防止出现错误,从而阻止未来的Unicorn重新启动 因此,我一直在寻找一种方法,让runit只启动初始的Unicorn实例,然后不监督它,这样当最初的Unicorn实例通过部署脚本重新启

我有一个EC2设置,其中我有一个chef脚本,可以用unicorn设置rails应用程序。由于我使用的脚本用于在引导时启动Unicorn,因此我遇到了这个问题,需要在引导后使用
sudo sv once app
手动禁用runit。否则,runit将干扰Unicorn的零停机部署,并开始生成新的Unicorn主机,以防止出现错误,从而阻止未来的Unicorn重新启动

因此,我一直在寻找一种方法,让runit只启动初始的Unicorn实例,然后不监督它,这样当最初的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稍后崩溃,但我不想手动这么做。我尝试在我的
/etc/sv/app/run
末尾添加
svonce-app
,但没有效果


有什么想法吗?

您可以直接从运行脚本调用
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

您可以直接从运行脚本调用
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

您是否尝试过在
应用程序\u ruby
之后执行的单独配方中运行
sv once app
?您甚至可以使用位于
/tmp
中的tempfile来确保自上次启动该框以来只执行一次。。。不要使用runit,只使用init.d或service。runit的全部目的是监控流程。您是否尝试过在
应用程序\u ruby
之后执行的单独配方中运行
sv once app
?您甚至可以使用位于
/tmp
中的tempfile来确保自上次启动该框以来只执行一次。。。不要使用runit,只使用init.d或service。runit的全部目的是监视流程。