在实例启动时运行Capistrano命令

时间:2014-09-30 19:02:10

标签: ruby-on-rails bash amazon-web-services capistrano resque

我正在AWS上运行Rails 3.2.18应用程序。此应用程序使用Capistrano进行部署,包括为应用程序启动Resque worker。

我的问题是,AWS偶尔可以在几乎没有警告的情况下重启实例,或者可以从AWS控制台重新启动实例。发生这种情况时,Resque不会像我们正常部署过程中那样启动。

我试图在/etc/init.d中创建一个shell脚本,以便在启动时启动Resque,但是这个脚本会继续提示输入密码,而且我不确定我错过了什么。启动脚本的本质是:

/bin/su -l deploy-user -c "/www/apps/deploy-user/current && bundle exec cap <environment> resque:scheduler:start resque:start"

显然,当作为&#34; deploy&#34;运行时,上述命令按预期工作。来自bash提示符的用户,但是当通过sudo /etc/init.d/resque start运行时,它会在运行第一个Capistrano命令时提示输入密码。

我遗失了一些明显的东西吗?或者是否有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

您应该使用-c参数运行su来指定命令,并将所有命令括在双引号中:

/bin/su -l deploy-user -c "/www/apps/deploy-user/current && bundle exec cap <environment>   resque:scheduler:start resque:start"

当然,您还有其他选择,例如/etc/rc.local。

但是如果您要使用init.d脚本,我建议正确地创建它(至少启动/停止,默认运行级别......)。否则我会使用/etc/rc.local或者甚至使用cron作为deploy-user:

@reboot /www/apps/deploy-user/current && bundle exec cap <environment> resque:scheduler:start resque:start