복붙노트

[RUBY-ON-RAILS] MONIT와 delayed_job을 모니터링하는 방법

RUBY-ON-RAILS

MONIT와 delayed_job을 모니터링하는 방법

MONIT와 delayed_job을 모니터링하는 방법의 웹 사이트에 어떤 사례가 있습니까?

모든 내가 사용하는 하나님을 찾을 수 있습니다,하지만 난 긴 일반적으로 빨아 루비에서 실행중인 프로세스 때문에 하나님을 사용하기를 거부. (하나님의 메일 링리스트에있는 가장 최근의 포스팅은? 하나님 메모리 사용이 꾸준히 성장.)

업데이트 : delayed_job 지금이 질문에 따라 샘플 MONIT의 설정이 함께 제공됩니다.

해결법

  1. ==============================

    1.여기에 내가이 작업을 가지고하는 방법입니다.

    여기에 내가이 작업을 가지고하는 방법입니다.

    문제 나는 다 퉜다 :

    MONIT을 디버깅 할 때, 난 당신이 오류 메시지를 얻을 수 있도록이의있는 init.d 버전을 중지하고 번째 명령 줄에서 실행하는 데 도움이 발견했다. 그렇지 않으면 일이 잘못가는 이유를 알아내는 것은 매우 어렵다.

    sudo /etc/init.d/monit stop
    sudo monit start delayed_job
    

    희망이 MONIT와 delayed_job을 모니터링하고자하는 다음 사람이 도움이됩니다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.나는 MONIT와 모르겠지만, 나는 Munin은 대기열 크기 및 평균 작업 실행 시간을 모니터링하는 플러그인 몇 가지를 작성했습니다. 내가 그 패치에 delayed_job에 대한 변경은 쉽게 당신이 당신이 막대기 경우 MONIT 플러그인을 쓰기 할 수 있도록 수 있습니다.

    나는 MONIT와 모르겠지만, 나는 Munin은 대기열 크기 및 평균 작업 실행 시간을 모니터링하는 플러그인 몇 가지를 작성했습니다. 내가 그 패치에 delayed_job에 대한 변경은 쉽게 당신이 당신이 막대기 경우 MONIT 플러그인을 쓰기 할 수 있도록 수 있습니다.

  6. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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
    
  14. from https://stackoverflow.com/questions/1226302/how-to-monitor-delayed-job-with-monit by cc-by-sa and MIT license