背景
- ec2-user(アプリによっては別ユーザ)にて、Railsアプリを起動していた。
- 定期的にイメージのバックアップを作成する際に、インスタンスを停止、起動したいという要望があった
- インスタンスを停止してから起動するとRailsアプリが起動されない。。。。
- インスタンスの起動時に自動実行されるscriptでRailsアプリを起動させよう。
アプリ起動時に実行していたコマンドたち
.sh
$ sudo service nginx start # rootでnginxを起動
$ RAILS_ENV=production bundle exec rails assets:precompile # デプロイユーザでprecompile
$ RAILS_ENV=production bundle exec puma -C config/puma.rb # デプロイユーザでpuma起動
自動起動scriptの作成
application-starter
#!/bin/sh
# chkconfig: 345 99 10
# description: start shell
case "$1" in
start)
service nginx start
su -l ec2-user -c "sh /home/ec2-user/start.sh"
;;
stop)
echo "stop!"
;;
*) break ;;
esac
start.sh
start.sh
#!/bin/sh
cd /home/ec2-user/application
RAILS_ENV=production bundle exec rails assets:precompile
RAILS_ENV=production bundle exec puma -C config/puma.rb
起動シェルの登録
$ sudo su -
# cd /etc/init.d/
# chmod +r application-starter
# chkconfig --add application-starter
# chkconfig application-starter on
AWSコンソールからインスタンスを停止 -> 起動を行う
ps
コマンドでアプリが起動しているか確認
ハマったところ
rootユーザ以外で実行する処理は別シェルにしておき su -l user -c "Command"
でuserを変えて実行する
su - user
でユーザを変更しようとすると対話式でパスワード入力を待ってしまい、シェルが終わらない。。。