Управление работниками Resque с помощью Monit при настройке RBenv

Я пытаюсь настроить Monit для управления работниками Resque, но он не начинает говорить /home/deployer/.rbenv/shims/bundle: line 4: exec: rbenv: not found Я проверил, выполняет ли он команды как deployer пользователь, и если я скопирую и вставлю команду напрямую через SSH, все будет работать нормально. Ниже представлена ​​моя конфигурация Monit. Спасибо!

check process resque_worker_1
  with pidfile CURRENT_PATH/tmp/pids/resque_worker_1.pid
  start program = "/usr/bin/env HOME=/home/deployer RACK_ENV=production PATH=/home/deployer/.rbenv/shims:/usr/local/bin:/usr/local/ruby/bin:/usr/bin:/bin:$PATH /bin/sh -l -c 'cd CURRENT_PATH; bundle exec rake environment resque:work RAILS_ENV=production QUEUE=high,normal,low VERBOSE=1 PIDFILE=CURRENT_PATH/tmp/pids/resque_worker_1.pid >> CURRENT_PATH/log/resque_worker_.log 2>&1'" 
    as uid deployer and gid admin
  stop program = "/bin/sh -c 'cd CURRENT_PATH && kill -9 $(cat tmp/pids/resque_worker_1.pid) && rm -f tmp/pids/resque_worker_1.pid; exit 0;'"
    as uid deployer and gid admin
  if totalmem is greater than 300 MB for 10 cycles then restart  # eating up memory?
  group resque_workers

person Fenelon    schedule 23.08.2012    source источник


Ответы (3)


Я не уверен, поможет ли это, но в моей стартовой строке monitrc я должен сначала выполнить su пользователю, от имени которого я хочу работать. Я не пробовал использовать флаги uid и gid, чтобы узнать, хорошо ли это работает, так что это может быть мучительной погоней за ответом.

Я помню, что у меня была такая же проблема, как и у вас ... все работало из командной строки, но не тогда, когда monit делал свое дело.

Например, в моем monitrc я слежу за arsendmail следующим образом:

# arsendmail_rails3
# daemon that watches and sends mail from the rails app
check process ar_sendmail with pidfile /var/www/rak/log/ar_sendmail.pid
start program "/bin/su - mike && /bin/bash -c 'cd /var/www/rak && ar_sendmail_rails3 -b1000 -d -e production'"
stop program "/bin/ps -ef | /bin/grep ar_sendmail_rails3 | /bin/grep -v grep | /usr/bin/awk '{ /usr/bin/print $2}' | /usr/bin/xargs /bin/kill -9"
person backwardm    schedule 27.08.2012

Я видел, что тема была создана в 2012 году, но у меня была аналогичная проблема, и эта тема занимает первое место в рейтинге Google.

Проблема в том, что команды запуска мониторинга с ограниченным env (env -i PATH = / bin: / usr / bin: / sbin: / usr / sbin / bin / sh для имитации).

Чтобы использовать monit с rbenv, вы должны указать правильный путь перед командой exec пакета.

PATH = / home / [USER] /. rbenv / bin: / home / [USER] /. rbenv / shims: $ PATH bundle exec ...

Пример с единорогом:

check process unicorn_dev with pidfile /home/wizville/app/dev.wizville.fr/shared/pids/unicorn.pid
  group dev
  start program =  "/bin/bash -c 'cd /home/wizville/app/dev.wizville.fr/current && PATH=/home/wizville/.rbenv/bin:/home/wizville/.rbenv/shims:$PATH bundle exec unicorn -c config/unicorn.rb -D'" as uid "wizville"
  stop program = "/bin/bash -c 'kill -s QUIT `cat /home/wizville/app/dev.wizville.fr/shared/pids/unicorn.pid`'"
  depends on mysql
person Oxyless    schedule 12.05.2014

Это сработало для меня.

проверьте процесс app_resque_worker с помощью pidfile ‹% = resque_pid%> start program =" / usr / bin / env HOME = / home / subcaster RACK_ENV = production PATH = / home / subcaster / .rvm / rubies / ruby-2.0.0-p247 / bin / ruby: / usr / local / bin: / usr / local / ruby ​​/ bin: / usr / bin: / bin: $ PATH / bin / sh -l -c \ 'cd ‹% = current_path%>; bundle exec rake environment resque: work RAILS_ENV = production BACKGROUND = yes QUEUE = * PIDFILE = ‹% = resque_pid%> \ '"

stop program = "kill -9 cat <%= resque_pid%> && rm -f‹% = resque_pid%> "

если totalmem больше 2000 МБ за 10 циклов, перезапустите

person hakimkal    schedule 14.01.2014