Скрипт Upstart, экспортированный Форманом, не работает должным образом, возрождается слишком быстро

Единственная ошибка, которую я смог найти, это просмотр dmesg

[  603.598951] init: thx4-web-1 main process ended, respawning
[  603.607935] init: thx4-web-1 main process (3901) terminated with status 127
[  603.607988] init: thx4-web-1 main process ended, respawning
[  603.616866] init: thx4-web-1 main process (3903) terminated with status 127
[  603.616917] init: thx4-web-1 respawning too fast, stopped

ОС: Debian 7, чрубый (2.1.2), выскочка (1.6.1-1) и бригадир (0.74.0)

Только один процесс, чтобы упростить процесс отладки в Procfile.staging:

web: RAILS_ENV=staging bundle exec puma -e staging -C config/puma.rb

Сгенерированные файлы мастером:

# /etc/init/thx4.conf
start on runlevel [2345]
stop on runlevel [!2345]

# /etc/init/thx4-web.conf
start on starting thx4
stop on stopping thx4

# /etc/init/thx4-web-1.conf
start on starting thx4-web
stop on stopping thx4-web
respawn
env PORT=5000
setuid deployer
chdir /home/deployer/apps/thx4/releases/20140707183433
exec RAILS_ENV=staging bundle exec puma -e staging -C config/puma.rb

Когда я запускаю $ foreman start -f Procfile.staging внутри папки приложения, все работает нормально.


person Ricardo    schedule 07.07.2014    source источник


Ответы (3)


Upstart регистрирует выполнение вашей службы в файле журнала с тем же именем в /var/log/upstart/your-service-name.log. Это должно быть полезно.

person Pencilcheck    schedule 19.10.2014

Если вы хотите контролировать интервал респауна, добавьте что-то вроде этого сразу после строки «респаун»:

# Please note that you need both "respawn" and "respawn limit".
# The second line will attempt to respawn no more than 3 times, 
# waiting 5 seconds between respawns.
respawn
respawn limit 3 5

Однако не думаю, что это поможет. Код состояния Bash 127 означает «команда не найдена». Возможно, ваши драгоценные камни не настроены должным образом для этой среды?

Вы можете найти более подробную информацию об ошибке № 127 в этом ответе SO.

person rootless    schedule 08.07.2014
comment
Я сделал много ошибок в конфигах, спасибо за ваш ответ, очень помогло объяснение о коде 127. Ответ на мою проблему: github.com/ddollar/foreman/issues/468 - person Ricardo; 09.07.2014

Как я решил:

Я создал файл .env внутри корня проекта.

# .env
PATH=/home/user/.gem/ruby/2.1.2/bin:/home/user/.rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/bin:/home/user/.rubies/ruby-2.1.2/bin:
RAILS_ENV=staging

# Procfile
web: bundle exec puma -e staging -C config/puma.rb

Экспортированный файл:

# /etc/init/app-web-1.conf
start on starting app-web
stop on stopping app-web
respawn

env PORT=5000
env PATH='/home/user/.gem/ruby/2.1.2/bin:/home/user/.rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/bin:/home/user/.rubies/ruby-2.1.2/bin'
env RAILS_ENV='staging'

setuid user

chdir /home/user/apps/app/releases/20140709064220

exec bundle exec puma -e staging -C config/puma.rb

Важно Мне пришлось установить сборщик драгоценных камней от имени пользователя root (я не знаю), как я сделал с Форманом здесь: https://github.com/postmodern/chruby/issues/276 $ sudo chruby-exec ruby-2.1.2 -- gem install bundler

person Ricardo    schedule 09.07.2014
comment
Причина в том, что в вашем PATH вы не добавили исходный путь. Если вы измените его на PATH='/home/user/.gem/ruby/2.1.2/bin:/home/user/.rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/bin:/home/user/.rubies/ruby-2.1.2/bin':$PATH, вам не нужно использовать упаковщик как root, но, может быть, потому что я использую rbenv, поэтому моя ситуация немного отличается? - person Pencilcheck; 19.10.2014