2015-01-12 8 views
1

나는 Ruby API와 서비스를 살펴보기 위해 하나님을 사용한다. 나는 서버가 부팅 할 때이 서비스를 시작하기 위해 Init 스크립트를 만들었다. 이렇게하면 두 가지 질문이 생깁니다.시작시 God 스크립트로드 - 세계적인 보석이 필요합니까?

먼저 루트 권한으로 스크립트를 실행해야합니까? init.d 스크립트를로드 할 때 프로세스가 루트에 의해 관리된다는 것을 알았습니다. 변경 사항에 대해 Sudo가 필요합니다.

두 번째로, 나는 훌륭하게 작동하는 몇 가지 주요 프로세스 (예 : 얇은)에 대해 RVM 래퍼를 만들었습니다. 그러나 Mongo 보석과 같이 사용하는 보석 중 일부는 묶음 기의 컨텍스트에서로드되지 않을 것입니다. (이것은 스크립트가로드되는 방식과 루트로로드되는 것으로 가정합니다.) 그래서 나는 강제로 Gem install Mongo (and bson)

init.d 로딩 된 스크립트를 bundler 컨텍스트에서로드 할 수있는 방법이 있습니까?

Ruby 배포 및 Linux 구성에 대해 아직 완전히 익숙하지 않아서 완전히 잘못했을 수도 있습니다. 나는 이런 식으로 해결 한

#!/bin/sh 

### BEGIN INIT INFO 
# Provides: god 
# Required-Start: $all 
# Required-Stop: $all 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: God 
### END INIT INFO 

NAME=god 
DESC=god 
GOD_BIN=/home/username/.rvm/wrappers/Godrunner/god 
GOD_CONFIG=/etc/god/god.conf 
GOD_LOG=/var/log/god.log 
GOD_PID=/var/run/god.pid 

set -e 

RETVAL=0 

case "$1" in 
    start) 
    echo -n "Starting $DESC: " 
    $GOD_BIN load -c $GOD_CONFIG 
exit 0 
fi 

RETVAL=0 

case "$1" in 
    start) 
    echo -n "Starting $DESC: " 
    $GOD_BIN load -c $GOD_CONFIG 
    RETVAL=$? 
    echo "$NAME." 
    ;; 
    status) 
$GOD_BIN status 
    RETVAL=$? 
    ;; 
    *) 
    echo "Usage: god {start|status}" 
    exit 1 
    ;; 
esac 

exit $RETVAL 
+0

혹시 그 해결 했습니까? 또한 모니터링되는 서비스가 루트로 실행되는 문제에 직면하고 있습니다. – mottalrd

답변

1

:

require 'yaml' 

config_path = '/opt/broker/current/config/api_config.yml' 
config = YAML.load_file config_path 

God.watch do |w| 
    w.name = 'Broker_API' 
    pid_file = config[:pid_file_path] 
    w.pid_file = pid_file 

    w.behavior :clean_pid_file 

    w.dir = config[:deployed_current_path] 
    w.env = config[:deployed_current_path] 

    port = config[:api_port] 
    server_logs = config[:api_logs] 
    config_ru = config[:api_config_file] 

    w.start = 'bundle exec thin -l %s -P %s -d -D -R %s -p %s --threaded start' %[server_logs, pid_file, config_ru, port] 
    w.stop = 'bundle exec thin -l %s -P %s -d -D -R %s -p %s --threaded stop' %[server_logs, pid_file, config_ru, port] 
    w.restart = 'bundle exec thin -l %s -P %s -d -D -R %s -p %s --threaded restart' %[server_logs, pid_file, config_ru, port] 
    w.log = config[:api_god_log] 

    w.keepalive 
end 

내 init 스크립트가 :

daemon --user $USER "$GOD_BIN \ 
-c $CONFIG_FILE \ 
-l $LOG_FILE \ 
--log-level $LOG_LEVEL \ 
-P $PID_FILE >/dev/null" 

이이 부분이다 여기에

내 신 스크립트의 예입니다 귀하의 $GOD_BIN load -c $GOD_CONFIG을 대체해야합니다. 그리고 이제 신은 $ USER로 실행됩니다.

이제 루비와 보석이 어디에 있는지 알고 싶다면이 정보를 제공해야합니다. 나는하고있다

source /etc/profile.d/ruby.sh 

어딘가에 스크립트의 시작 부분에.

ruby.sh 내용 :

export PATH=/opt/ruby-2.1/bin/:$PATH 
export GEM_PATH=/opt/ruby-2.1/lib64/ruby/gems/2.1.0