2014-09-30 37 views
0

我正在AWS上運行Rails 3.2.18應用程序。此應用程序使用Capistrano進行部署,包括爲應用程序啓動Resque工作人員。在實例啓動時運行Capistrano命令

我的問題是,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" 

顯然按預期從bash提示符的「部署」用戶的身份運行,但是當通過sudo /etc/init.d/resque start運行,它在運行的第一個提示輸入密碼上述命令工作Capistrano命令。

有沒有什麼明顯的我失蹤?或者,有沒有更好的方法來實現這一目標?

回答

0

您應該運行與蘇-c參數指定的命令,雙引號內的所有命令:

/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作業:

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

啊,我複製了一箇舊命令,而不是實際導致問題的那個。我正在使用'-c'標誌,但它仍然不起作用。我已經更新了這個問題。 – CDub 2014-10-01 14:00:40