Показаны сообщения с ярлыком rc. Показать все сообщения
Показаны сообщения с ярлыком rc. Показать все сообщения

четверг, 5 января 2012 г.

node.js service gentoo - сервис для старта node.js в gentoo

Решая задачу с проксированием запросов на сбербанковский сайт - заодно сделал запуск сервисов для node.js в нормальном для gentoo варианте. Почему такого сервиса нет в сборке node.js из portage, мне не совсем понятно, но если гора не идет к нам - приходится самим шевелиться.

hg clone http://kilork.org/public/overlay


Путь к извлеченному оверлею прописываем в make.conf.

После этого делаем:
emerge nodejs-service


Все готово к запуску нашего сервиса. Допустим у нас есть директория /home/user/js в которой находится файл server.js - этот файл мы хотим превратить в сервис в gentoo, запускаемый через node.js.

В примере назовем сервис ourservice. Для этого необходимо создать файл /etc/nodejs-service/ourservice.conf:
NODE_DIR=/home/user/js
NODE_SCRIPT=server.js


Затем надо перейти в директорию /etc/init.d и создать символическую ссылку на наш сервис (под root естественно):
cd /etc/init.d
ln -s nodejs-service nodejs-service.ourservice


Осталось только запустить новый сервис:
rc-config start nodejs-service.ourservice


Если все прошло хорошо, то наш сервер будет висеть в списке процессов и может быть даже обрабатывать запросы.

воскресенье, 6 июня 2010 г.

Зависимости между службами в Gentoo: наводим порядок в net.ppp0, nginx и xdm/gdm

В gentoo иногда сталкиваешься с неприятными моментами в старте сервисов. После отключения hal, перестал стартовать xdm, так как dbus стартовал пойзже. А nginx стартовал раньше apache2 (что вообщем-то не так важно), но еще и хотел директории /var/tmp/nginx, а /var/tmp у меня - это раздел в памяти. Если отваливался net.ppp0, то останавливались все сетевые сервисы, хотя локальная сеть и вайфай вполне себе продолжали работать. Вообщем, так дальше жить было нельзя.

Первым делом идем в /etc/rc.conf и ставим:
rc_depend_strict="NO"

Тем самым мы говорим, что достаточно хотя бы одного поставщика net, а не всех сразу. Это решает проблему с net.ppp0.

Дальше, я добавил сервис для создания каталога для nginx, и для установки некоторого порядка в старте, у меня этот файлик я назвал /etc/init.d/kilork и выглядит он так:
#!/sbin/runscript

description="kilork"

depend()
{
 after apache2
 after dbus
}

start()
{
 ebegin "Starting local"

 mkdir /var/tmp/nginx

 eend $? "Failed to start local"
}

stop()
{
 ebegin "Stopping local"

 eend $? "Failed to stop local"
}

Здесь мы говорим, что запускаемся после apache2 (для nginx) и после dbus (для gdm).

Добавляем в сервисы в default (у меня они там все кучей):
rc-config add kilork default

Теперь создаем или правим настройки по порядку старта для nginx и xdm:
kilork@phoenix ~ $ cat /etc/conf.d/nginx 
rc_after="kilork"

kilork@phoenix ~ $ cat /etc/conf.d/xdm
CHECKVT=7
DISPLAYMANAGER="gdm"
rc_after="kilork"

В обоих скриптах добавляется строчка rc_after="kilork", которая говорит, что запускаемся мы после старта сервиса kilork.

Вот теперь вроде все замечательно стартует, ничто не отваливается и все поднимается когда надо. Буду смотреть, насколько рабоче решение, до этого я пользовался парочкой дурацких скриптов, которые смотрели, висит ли соединение, после чего переподнимали все сервисы, но это было естественно неправильно.

К слову сказать, для целей, под которые я сделал kilork - есть стандартный local, но вот только у него стоит "after *", что немного идет в разрез с тем, что мне надо запустить после него gdm и nginx. Поэтому вот так.