[RUBY-ON-RAILS] MONIT와 delayed_job을 모니터링하는 방법
RUBY-ON-RAILSMONIT와 delayed_job을 모니터링하는 방법
MONIT와 delayed_job을 모니터링하는 방법의 웹 사이트에 어떤 사례가 있습니까?
모든 내가 사용하는 하나님을 찾을 수 있습니다,하지만 난 긴 일반적으로 빨아 루비에서 실행중인 프로세스 때문에 하나님을 사용하기를 거부. (하나님의 메일 링리스트에있는 가장 최근의 포스팅은? 하나님 메모리 사용이 꾸준히 성장.)
업데이트 : delayed_job 지금이 질문에 따라 샘플 MONIT의 설정이 함께 제공됩니다.
해결법
-
==============================
1.여기에 내가이 작업을 가지고하는 방법입니다.
여기에 내가이 작업을 가지고하는 방법입니다.
문제 나는 다 퉜다 :
MONIT을 디버깅 할 때, 난 당신이 오류 메시지를 얻을 수 있도록이의있는 init.d 버전을 중지하고 번째 명령 줄에서 실행하는 데 도움이 발견했다. 그렇지 않으면 일이 잘못가는 이유를 알아내는 것은 매우 어렵다.
sudo /etc/init.d/monit stop sudo monit start delayed_job
희망이 MONIT와 delayed_job을 모니터링하고자하는 다음 사람이 도움이됩니다.
-
==============================
2.무엇의 가치를 들어, 당신은 항상 설정에 MONIT 환경과는 / usr / 빈 / ENV를 사용할 수 있습니다. 이것은 환경 (-e) 옵션이 사용되지 delayed_job, 1.8.4, 현재 버전에서 특히 중요하다.
무엇의 가치를 들어, 당신은 항상 설정에 MONIT 환경과는 / usr / 빈 / ENV를 사용할 수 있습니다. 이것은 환경 (-e) 옵션이 사용되지 delayed_job, 1.8.4, 현재 버전에서 특히 중요하다.
check process delayed_job with pidfile /var/app/shared/pids/delayed_job.pid start program = "/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job start" stop program = "/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job stop"
경우에 따라서는, 너무 ENV와 PATH를 설정해야 할 수도 있습니다.
-
==============================
3.나는 지연 작업에 대한 init 스크립트를 쉽게 만들 수 있었다 발견했다. 그것은 여기에 있습니다 : http://gist.github.com/408929 이하 :
나는 지연 작업에 대한 init 스크립트를 쉽게 만들 수 있었다 발견했다. 그것은 여기에 있습니다 : http://gist.github.com/408929 이하 :
#! /bin/sh set_path="cd /home/rails/evatool_staging/current" case "$1" in start) echo -n "Starting delayed_job: " su - rails -c "$set_path; RAILS_ENV=staging script/delayed_job start" >> /var/log/delayed_job.log 2>&1 echo "done." ;; stop) echo -n "Stopping sphinx: " su - rails -c "$set_path; RAILS_ENV=staging script/delayed_job stop" >> /var/log/delayed_job.log 2>&1 echo "done." ;; *) N=/etc/init.d/delayed_job_staging echo "Usage: $N {start|stop}" >&2 exit 1 ;; esac exit 0
그런 다음 MONIT이 당신의 monitrc 파일 때문에 응용 프로그램을 시작 / 다시 시작하도록 설정되어 있는지 확인합니다 :
check process delayed_job with pidfile "/path_to_my_rails_app/shared/pids/delayed_job.pid" start program = "/etc/init.d/delayed_job start" stop program = "/etc/init.d/delayed_job stop"
그 위대한 작품!
-
==============================
4.나는 부팅 크론로 delayed_job을 시작하는 좋은 방법을 발견했다. 나는 크론를 제어 할 때마다 사용하고 있습니다.
나는 부팅 크론로 delayed_job을 시작하는 좋은 방법을 발견했다. 나는 크론를 제어 할 때마다 사용하고 있습니다.
내 schedule.rb :
# custom job type to control delayed_job job_type :delayed_job, 'cd :path;RAILS_ENV=:environment script/delayed_job ":task"' # delayed job start on boot every :reboot do delayed_job "start" end
참고 : 나는 0.5.0 버전으로 보석 고용 _ 형태를 사용할 수 있도록 할 때마다 업그레이드
-
==============================
5.나는 MONIT와 모르겠지만, 나는 Munin은 대기열 크기 및 평균 작업 실행 시간을 모니터링하는 플러그인 몇 가지를 작성했습니다. 내가 그 패치에 delayed_job에 대한 변경은 쉽게 당신이 당신이 막대기 경우 MONIT 플러그인을 쓰기 할 수 있도록 수 있습니다.
나는 MONIT와 모르겠지만, 나는 Munin은 대기열 크기 및 평균 작업 실행 시간을 모니터링하는 플러그인 몇 가지를 작성했습니다. 내가 그 패치에 delayed_job에 대한 변경은 쉽게 당신이 당신이 막대기 경우 MONIT 플러그인을 쓰기 할 수 있도록 수 있습니다.
-
==============================
6.스크립트 주셔서 감사합니다.
스크립트 주셔서 감사합니다.
하나 개 잡았다 - 정의에 의해 MONIT은 '스파르타 경로'의이 있기 때문에
/bin:/usr/bin:/sbin:/usr/sbin
날이 루비 설치를 위해 ... 그리고 / / usr / 지방 / 빈에 연결, 나는 (모드 자세한 MONIT에 대해서도 -v와 함께) 다시 시작 delayed_job 할 때 왜 MONIT가 자동으로 실패했다 알아 내려고 시간 동안 주위에 뒹굴다했다 .
결국 나는이 작업을 수행했다 :
check process delayed_job with pidfile /var/www/app/shared/pids/delayed_job.pid start program = "/usr/bin/env PATH=$PATH:/usr/local/bin /var/www/app/current/script/delayed_job -e production start" stop program = "/usr/bin/env PATH=$PATH:/usr/local/bin /var/www/app/current/script/delayed_job -e production stop"
-
==============================
7.나는 그것이 MONIT 오른쪽 사용자와 시작과 함께 작동하도록 토비에 의해 다른 스크립트로이 페이지의 솔루션을 결합했다.
나는 그것이 MONIT 오른쪽 사용자와 시작과 함께 작동하도록 토비에 의해 다른 스크립트로이 페이지의 솔루션을 결합했다.
이처럼 내 delayed_job.monitrc의 외모 그래서 :
check process delayed_job with pidfile /var/app/shared/pids/delayed_job.pid start program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job start' - rails" stop program = "/bin/su -c '/usr/bin/env RAILS_ENV=production /var/app/current/script/delayed_job stop' - rails"
-
==============================
8.당신의 MONIT 루트로 실행하고 my_user 같은 delayed_job를 실행하려면 다음을 수행하십시오
당신의 MONIT 루트로 실행하고 my_user 같은 delayed_job를 실행하려면 다음을 수행하십시오
/etc/init.d/delayed_job:
#!/bin/sh # chmod 755 /etc/init.d/delayed_job # chown root:root /etc/init.d/delayed_job case "$1" in start|stop|restart) DJ_CMD=$1 ;; *) echo "Usage: $0 {start|stop|restart}" exit esac su -c "cd /var/www/my_app/current && /usr/bin/env bin/delayed_job $DJ_CMD" - my_user
/var/www/my_app/shared/monit/delayed_job.monitrc:
check process delayed_job with pidfile /var/www/my_app/shared/tmp/pids/delayed_job.pid start program = "/etc/init.d/delayed_job start" stop program = "/etc/init.d/delayed_job stop" if 5 restarts within 5 cycles then timeout
/ 기타 / 메시지 /의 monitrc :
# add at bottom include /var/www/my_app/shared/monit/*
-
==============================
9.내가 루트로 실행하지 않았기 때문에, 나는 (스크립트 / delayed_job에 대한 절대 경로가 될 것 PROGNAME를) 시작 및 중지에 사용 MONIT 떠들썩한 init 스크립트를 작성 결국 :
내가 루트로 실행하지 않았기 때문에, 나는 (스크립트 / delayed_job에 대한 절대 경로가 될 것 PROGNAME를) 시작 및 중지에 사용 MONIT 떠들썩한 init 스크립트를 작성 결국 :
start() { echo "Starting $PROGNAME" sudo -u $USER /usr/bin/env HOME=$HOME RAILS_ENV=$RAILS_ENV $PROGNAME start } stop() { echo "Stopping $PROGNAME" sudo -u $USER /usr/bin/env HOME=$HOME RAILS_ENV=$RAILS_ENV $PROGNAME stop }
-
==============================
10.나는이 주제에 꽤 많은 시간을 보냈습니다. 나는 내가 delayed_job과 그 작업의 모니터링이 특별히 주소 플러그인 delayed_job_tracer를 썼다 그래서위한 좋은 솔루션을 가지고 있지 함께 공급 하였다.
나는이 주제에 꽤 많은 시간을 보냈습니다. 나는 내가 delayed_job과 그 작업의 모니터링이 특별히 주소 플러그인 delayed_job_tracer를 썼다 그래서위한 좋은 솔루션을 가지고 있지 함께 공급 하였다.
여기에 내가 그것에 대해 쓴 기사입니다입니다 : http://modernagility.com/articles/5-monitoring-delayed_job-and-its-jobs
이 플러그인은 지연된 작업 프로세스를 모니터링하고 작업 중 하나에 오류가 발생하는 경우 delayed_job 충돌하거나 경우에 당신에게 전자 메일을 보냅니다.
-
==============================
11.레일 3의 경우, 나를위한 작품을 config (설정) 이하로 제대로 나침반 작동하도록 설정 홈페이지 ENV을해야 할 수도 있습니다 :
레일 3의 경우, 나를위한 작품을 config (설정) 이하로 제대로 나침반 작동하도록 설정 홈페이지 ENV을해야 할 수도 있습니다 :
check process delayed_job with pidfile /home/user/app/shared/pids/delayed_job.pid start program = "/bin/sh -c 'cd /home/user/app/current; HOME=/home/user RAILS_ENV=production script/delayed_job start'" stop program = "/bin/sh -c 'cd /home/user/app/current; HOME=/home/user RAILS_ENV=production script/delayed_job stop'"
-
==============================
12.나는 여전히 작업이 잠겨있는 동안 지연된 작업 죽으면, 그 작업이 해제되지 않습니다 문제 다 퉜다. 나는 PID 파일을보고 죽은 노동자에서 모든 작업을 확보 할 지연된 작업의 래퍼 스크립트를 썼습니다.
나는 여전히 작업이 잠겨있는 동안 지연된 작업 죽으면, 그 작업이 해제되지 않습니다 문제 다 퉜다. 나는 PID 파일을보고 죽은 노동자에서 모든 작업을 확보 할 지연된 작업의 래퍼 스크립트를 썼습니다.
이 스크립트는 고무 / 카피 스트라 노입니다
역할 / 지연 작업 / 지연 작업 래퍼 :
<% @path = '/etc/monit/monit.d/monit-delayedjob.conf' %> <% workers = 4 %> <% workers.times do |i| %> <% PIDFILE = "/mnt/custora-#{RUBBER_ENV}/shared/pids/delayed_job.#{i}.pid" %> <%= "check process delayed_job.#{i} with pidfile #{PIDFILE}"%> group delayed_job-<%= RUBBER_ENV %> <%= " start program = \"/bin/bash /mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/current/script/delayed_job_wrapper #{i} start\"" %> <%= " stop program = \"/bin/bash /mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/current/script/delayed_job_wrapper #{i} stop\"" %> <% end %>
역할 / 지연 작업 / 지연 작업 래퍼
#!/bin/bash <% @path = "/mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/current/script/delayed_job_wrapper" %> <%= "pid_file=/mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/shared/pids/delayed_job.$1.pid" %> if [ -e $pid_file ]; then pid=`cat $pid_file` if [ $2 == "start" ]; then ps -e | grep ^$pid if [ $? -eq 0 ]; then echo "already running $pid" exit fi rm $pid_file fi locked_by="delayed_job.$1 host:`hostname` pid:$pid" <%=" /usr/bin/mysql -e \"update delayed_jobs set locked_at = null, locked_by = null where locked_by='$locked_by'\" -u#{rubber_env.db_user} -h#{rubber_instances.for_role('db', 'primary' => true).first.full_name} #{rubber_env.db_name} " %> fi <%= "cd /mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/current" %> . /etc/profile <%= "RAILS_ENV=#{RUBBER_ENV} script/delayed_job -i $1 $2"%>
-
==============================
13.무슨 일이 일어나고 있는지 확인하려면 모드 자세한 포 그라운드에서 실행 MONIT : sudo는 MONIT -IV
무슨 일이 일어나고 있는지 확인하려면 모드 자세한 포 그라운드에서 실행 MONIT : sudo는 MONIT -IV
사용자 "www1"그룹 "www1"에 설치 RVM을 사용.
파일은 / etc / MONIT / monitrc :
#delayed_job check process delayed_job with pidfile /home/www1/your_app/current/tmp/pids/delayed_job.pid start program "/bin/bash -c 'PATH=$PATH:/home/www1/.rvm/bin;source /home/www1/.rvm/scripts/rvm;cd /home/www1/your_app/current;RAILS_ENV=production bundle exec script/delayed_job start'" as uid www1 and gid www1 stop program "/bin/bash -c 'PATH=$PATH:/home/www1/.rvm/bin;source /home/www1/.rvm/scripts/rvm;cd /home/www1/your_app/current;RAILS_ENV=production bundle exec script/delayed_job stop'" as uid www1 and gid www1 if totalmem is greater than 200 MB for 2 cycles then alert
from https://stackoverflow.com/questions/1226302/how-to-monitor-delayed-job-with-monit by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 : 어떻게 페이지의 제목을 변경하려면? (0) | 2020.02.27 |
---|---|
[RUBY-ON-RAILS] 레일 모델의 기본 정렬 순서? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 어떻게 레일의 상대 시간을합니까? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 어떻게 RVM은 어떻게 실제로 일을 rbenv? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 루비 온 레일즈 내에서 보안 REST API를 구축하기위한 제안을 찾고 (0) | 2020.02.27 |