Как запустить грабли с помощью upstart

Я пытаюсь настроить работника Resque в качестве сценария инициализации Upstart, который будет использоваться Monit в приложении Rails. Я не сисоп, и я пытался написать это, используя примеры из другого скрипта инициализации, который есть на нашем сервере, вот что я получил:

start on startup
stop on shutdown

pre-start script
   cd /var/www/my-app/current
end script

script
   exec bundle exec rake environment resque:work RAILS_ENV=staging PIDFILE=/var/run/resque.pid QUEUE=sync >> /var/log/resque.log
end script

Но это не сработает, если я попытаюсь sudo start resque Я получил:

resque start/running, process XXXX

Насколько я знаю, ничего не запускается, процесс Resque не найден, нет файла журнала. Я совершенно заблудился, как заставить его работать.

Обновление: я нашел файл системного журнала, и он говорит:

Nov  4 17:20:09 fantasysports init: resque main process (3057) terminated with status 2

Обновление: я попытался запустить его с помощью sudo (да, это не имеет смысла!) И удалил перенаправление вывода в файл журнала, и теперь я получаю другой код состояния:

Nov  4 17:29:44 fantasysports init: resque main process (3276) terminated with status 10

Обновление: Закончилось угробление Upstart для init.d, как start-stop-daemon намного лучше задокументировано, и это дает мне полный контроль над тем, что происходит.

3 ответа

Вот как я это делаю.. это также добавляет в рвм

start on startup
stop on starting rcS

chdir /data/pusher/current
env RAILS_ENV=production
script
  /usr/local/bin/rvm-shell '1.9.2@app' -c 'JOBS_PER_FORK=25 RAILS_ENV=production QUEUE=app_production bundle exec rake --trace resque:work >> /data/app/current/log/app-worker.production.log 2>&1'
end script

Редактировать: вот как я это делаю для работы от имени другого пользователя... кажется, что chdir не удостоен чести... так что это отчасти хаки

start on runlevel [2345]
stop on starting rcS

chdir /data/app/current
env RAILS_ENV=production
script
        sudo -u user -s -- "cd /data/app/current; export RAILS_ENV=production; /usr/local/bin/rvm-shell '1.9.2-p180@app' -c 'QUEUE=app_production bundle exec rake resque:work >> /data/app/current/log/app-worker.production.log 2>&1'"
end script

Вам в значительной степени нужно перейти в правильный каталог и установить RAILS_ENV в команде sudo

Возможно, вы захотите взглянуть на Формана: http://ddollar.github.com/foreman/ который имеет возможность экспорта в upstart и рекомендуется для управления рабочими-реставрами в ряде публикаций, включая эту: http: // michaelvanrooijen.com / статьи / 2011/06/08-управление-и-мониторинг-ваш-рубиново-приложений с-бригадир-и-выскочка /

Способ, который руководство RVM рекомендует в разделе "Интеграция" для " Использование служб на основе RVM и Ruby, которые запускаются через init.d или upstart ", заключается в использовании псевдонимов и оболочек RVM.

У меня была ситуация, когда я должен был контролировать bluepill процесс. Этот процесс является демоном, поэтому он разветвляется 2 раза. Начиная это с rvm-shell Команда добавила третий форк... Из-за чего Upstart не смог отследить процесс PID ( он может отслеживать процессы максимум только до второго форка - когда expect daemon строфа).

Я решил это следующим образом:

  1. Сначала я создал псевдоним RVM для своей среды:

    rvm alias create my_app ruby-2.0.0-p247@my_app

  2. Затем я использовал следующую конфигурацию upstart для своей работы:

`# /etc/init/bluepill_my-app.conf

description "my_app Bluepill"

start on runlevel [2]
stop on runlevel [016]

setuid my-app
setgid my-app

expect daemon
respawn

env USER=my-app
env HOME=/var/www/my-app/
env RAILS_ENV=my-app
env BLUEPILL_BASE_DIR=/tmp/bluepill_my-app

chdir /var/www/my-app/current/

exec /var/www/my-app/.rvm/wrappers/my-app/bundle exec bluepill --no-privileged load  /var/www/my-app/current/config/deploy/monitoring/my-app.pill >> /tmp/upstart.log 2>&1

`

Bundler должен быть установлен в заданном наборе гемов, на который указывает псевдоним RVM.

Вызов bundler Скрипт-обертка не вызывает никаких вилок, таких как rvm-shell команда делает.

Альтернативой может быть установка bluepill gem в используемом наборе gemset, создайте для него скрипт-обертку и используйте его напрямую, без exe-пакета, - как предлагает руководство RVM, - но используя его через bunlder позволяет bluepill .pill файлы для использования в библиотеке my-app (например, setingslogic так далее.).

Это немного не по теме, но я думаю, что это хороший пример того, как сделать это лучше. Надеюсь, это поможет.

Другие вопросы по тегам