我正在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命令时提示输入密码。
我遗失了一些明显的东西吗?或者是否有更好的方法来实现这一目标?
答案 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