Как сократить запись процесса inittab, a.k.a., куда поместить переменные среды, которые будут видеть init? - PullRequest
0 голосов
/ 15 мая 2009

Я настраиваю сервер Debian Etch для размещения приложений ruby ​​и php с nginx. Я успешно настроил inittab для запуска процесса php-cgi при загрузке с действием респауна. После обслуживания 1000 запросов рабочие процессы php-cgi умирают и запускаются программой init. Запись inittab выглядит так:

50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi

Первоначально я написал запись процесса (все после 3-го двоеточия) в отдельном сценарии (просто потому, что он был длинным) и поместил имя этого сценария в запись inittab, но поскольку сценарий запустил бы одну строку и умер Системный журнал был заполнен ошибками вроде этого:

May  7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes

Таким образом, я избавился от файла скрипта и просто поместил всю строку в inittab. Отныне в системном журнале ошибок не обнаружено.

Теперь я пытаюсь сделать то же самое с thin , чтобы подать заявку на рельсы. Я могу успешно запустить тонкий сервер, выполнив следующую команду:

sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start

Это работает, по-видимому, точно так же, использую ли я флаг -d (daemonize) или нет. Управление командной строкой возвращается немедленно (процессы были демонизированы) в любом случае. Если я помещаю всю эту команду (за исключением sudo и с абсолютными путями) в inittab, init жалуется (в системном журнале), что запись процесса слишком длинная, поэтому я помещаю параметры в экспортированную переменную среды в / etc / profile. Теперь я могу успешно запустить сервер с:

sudo thin $THIN_OPTIONS start

Но когда я помещаю это в запись inittab с действием возрождения

51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start

журналы ясно указывают, что переменная окружения не видна для init; это как если бы команда была просто "тонкий старт".

Как я могу сократить запись процесса inittab? Есть ли другой файл, кроме / etc / profile, где я мог бы установить переменную среды THIN_OPTIONS? Мой предыдущий опыт работы с php-cgi говорит мне, что я не могу просто поместить всю команду в отдельный скрипт.

Ответы [ 2 ]

1 голос
/ 19 мая 2009

А почему бы вам не позвонить обертке, начинающей с ваших вариантов?

start_thin.sh:
#! / Bin / Баш
/ usr / local / bin / thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c / path / to / rails / app -p 8010 -u someuser -g somegroup -s 2 -d начало

, а затем:
51: 23: респаун: / USR / местные / бен / start_thin

0 голосов
/ 15 мая 2009

сценарий init.d

Использовать скрипт в

/etc/rc.d/init.d

и установите уровень запуска

Вот несколько примеров с thin, ruby, apache

http://articles.slicehost.com/2009/4/17/centos-apache-rails-and-thin

http://blog.fiveruns.com/2008/9/24/rails-automation-at-slicehost

http://elwoodicious.com/2008/07/15/nginx-haproxy-thin-fastcgi-php5-load-balanced-rails-with-php-support/

Которые предоставляют примеры сценариев для использования.

редактировать : Аскер отметил, что это не позволит возродиться. Я предложил разветвить в сценарии инициализации и отречься от процесса, чтобы init не зависал (он может выполнить fork (), сам скрипт проверит) И затем создание бесконечного цикла, который ожидает, когда процесс сервера умрет, и перезапустит его.

edit2 : Кажется, init запустит скрипт. Это должен сделать только цикл.

...