안녕하세요 저는 루비 프로그램을 모니터링하기위한 새로운 init 스크립트를 만들고 있습니다. sudo를 통해 ruby를 실행하는 방법
NAME=differ
FILE_PATH=/home/amer/Documents/ruby_projects/differ/
PIDFILE=/home/amer/pid/differ.pid
PID=$$
EXEC='/home/amer/.rvm/rubies/ruby-2.0.0-p247/bin/ruby main_scheduler.rb'
do_start(){
echo "started"
cd $FILE_PATH
pwd
$EXEC >> init_log/output.log &
echo $! > $PIDFILE
echo "---------"
echo `cat $PIDFILE`
echo "all are DONE "
}
do_stop(){
PID=`cat $PIDFILE`
echo $PID
if ps -p $PID ; then
kill -6 $PID
echo "it is over"
else
echo "its not running"
fi
}
case "$1" in
start)
echo $$
echo -n "Starting script differ "
do_start
;;
stop)
echo "stopping ...."
do_stop
;;
status)
PID=`cat $PIDFILE`
echo "STATUS $PID"
if ps -p $PID -f; then
echo running
else
echo not running
fi
;;
restart|reload|condrestart)
do_stop
do_start
;;
*)
echo "Usage: /etc/init.d/blah {start|stop}"
exit 1
;;
esac
exit 0
그리고 내 MONIT 프로세스가
check process differ with pidfile /home/amer/pid/differ.pid
if changed pid then exec "/etc/init.d/differ start"
start program = "/etc/init.d/differ start"
stop program = "/etc/init.d/differ stop"
if 5 restarts within 5 cycles then timeout
하지만 난 내 MONIT에서 시작 서비스를 실행할 때 상태였다 "실행이 실패했습니다"하고 나는
info : 'differ' start: /bin/bash
error : 'differ' failed to start
error : 'differ' process is not running
말했다 MONIT의 로그 파일을 확인
문제의 근본을 분석했을 때. 그 이유는 monit이 root로 실행되고 ruby를 실행하는 스크립트는 sudo /etc/init.d/differ.sh start으로 실행되지만 루비는 'amer'사용자에만 설치됩니다. 나는이 문제에 도와주세요
[email protected]:~$ /home/amer/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- bundler/setup (LoadError)
from /home/amer/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from main_scheduler.rb:2:in `<main>'
로 오류를 표시
sudo -u amer $EXEC >>init_log/output.log &
을 시도했습니다. 나는 두 개의 루비 버전을 가지고있다.
/home/amer/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
/home/amer/.rvm/bin/ruby
죄송합니다. 나는 두 구문 모두 작동하지 않는 것을 시도했다. – Amerrnath
'EXEC = 'ruby main_scheduler.rb'에서 루비에 대한 전체 경로를 사용해보십시오. – ahilsend
예 여전히 동일한 결과 – Amerrnath