22630


Amazon Linux再起動時にUnicornが自動的に起動されません。

環境  
OS Amazon Linux  
ruby 2.2.3  
rails 4.2.3  
nginx 1.9.11  
unicorn 5.0.1

unicornの起動スクリプトは`etc/init.d/`にファイル名`unicorn`として配置しランレベル3と5をオンにしています。  
`sudo service unicorn start`後に問題なく起動できており、`sudo service unicorn
stop`で停止もできています。しかし、再起動させるとunicornが起動していません。また、起動していないのになぜかpidファイルはあります。`sudo
service unicorn stop`コマンド実行時はpidファイルが消えてその後`sudo service unicorn
start`を実行できていますのでなぜpidファイルだけ残っているのか分かりません。

起動スクリプトは下記の通りとなっています。

[code]

    #!/bin/sh
    #
    #
    # unicorn - this script starts and stops the unicorn daemon
    #
    # chkconfig: - 85 15
    # description: Unicorn is Rack Rails Server
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    PROG_NAME=unicorn
    APP_ROOT=/home/ec2-user/rails_test
    ENV=production
    PID_FILE=/var/run/rails-app-unicorn.pid
    LOCK_FILE=/var/lock/subsys/unicorn
    CONF="${APP_ROOT}/config/unicorn.rb"
    CMD="bundle exec unicorn -c ${CONF} -E ${ENV} -D"
    
    export PATH=/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:$PATH
    
    cd $APP_ROOT || exit 1
    
    case $1 in
        start)
            daemon $CMD
            touch $LOCK_FILE
            ;;
        stop)
            killproc -p $PID_FILE $PROG_NAME -QUIT
            rm -f $LOCK_FILE
            ;;
        restart)
            killproc -p $PID_FILE $PROG_NAME -USR2
            ;;
        *)
        echo >&2 "Usage: $0 <start|stop|restart>"
        exit 1
        ;;
    esac
    
[/code]

ご指摘やアドバイス頂けると助かります。  
よろしくお願いします。

追記

原因が分かりました。  
unicorn起動時にpostgresが起動していなければならないところ、postgresが起動していなかったのが原因でした。postgresの起動優先度が98に設定されているので起動スクリプトの`#
chkconfig: - 85 15`を`# chkconfig: - 99 15`に変更することで無事に起動できました。


CC BY-SA 3.0
2016-02-28T03:53:38.813
22615
2016-02-29T11:20:59.083
2016-02-29T11:20:59.083
12232
12232
question
ruby-on-rails linux unicorn
Amazon Linux再起動時にUnicornが自動的に起動しない


start 時に /var/lock/subsys/unicorn ファイルを作成しないと、OS シャットダウン時のサービス停止処理で service
unicorn stop が実行されず、pid ファイルが残ります。  
OS 起動時の service unicorn start で pid ファイルが既に存在するので、起動しないのだと思います。

(2016/02/29 01:27 追記) /etc/init.d/unicorn トレースログ取得方法  
スクリプトの最初の方に追記:

[code]

    exec 3>>/tmp/unicorn-trace.log
    BASH_XTRACEFD=3
    set -x
    
[/code]

スクリプトの最後の方(exit する前)に追記:

[code]

    set +x
    unset BASH_XTRACEFD
    exec 3>&-
    
[/code]


CC BY-SA 3.0
2016-02-28T08:36:15.297
22630
2016-02-28T16:28:22.203
2016-02-28T16:28:22.203
4603
4603
22615
answer