Демоны

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Демоны

Сообщение shade »

Решил переписать одну WindowsNT службу в виде *nix-демона...

Как написать вроде понятно, но если кто-то поделиться полезными ссылками ссылками/примерами то не обижусь ;)

Первый вопрос такой:

Как установить демона, чтобы он автоматически запускался. Точнее: как написать (де)инсталлятор, который сделает это без привлечения кривых рук пользователя?

Контекст:
1. Конечный пользователь почти ламер (в Linux), поэтому сам ковырять конфигфайлы и скрипты не сможет;
2. Желательно, чтобы поддерживалось как можно больше дистрибутивов или вообще от них не зависело.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Как написать вроде понятно, но если кто-то поделиться полезными ссылками ссылками/примерами то не обижусь ;)

тут
и тут

Как установить демона, чтобы он автоматически запускался. Точнее: как написать (де)инсталлятор, который сделает это без привлечения кривых рук пользователя?

по второй ссылке есть скрипт который надо положить к каталог /etc/rc.d/init.d/ или /etc/init.d/ в зависимости от системы, может есть еще какие =) ну и выбием после чего и при каких загрузках запускаем пример тут
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Attid писал(а):по второй ссылке есть скрипт который надо положить к каталог /etc/rc.d/init.d/ или /etc/init.d/ в зависимости от системы, может есть еще какие =) ну и выбием после чего и при каких загрузках запускаем пример тут

Не работает :(
Пробовал /etc/init.d/ (он является симлинком на /etc/rc.d/init.d)
Как быть с /etc/rc.d/rcX.d не понял - попробовал сделать как apache2.2 - сделал симлинк /etc/rc.d/rc0.d/K16checkerd на /etc/init.d/checkerd - все равно не запускается.

Пробовал вручную запускать:
/etc/init.d/checkerd start - корректно запускает
/etc/init.d/checkerd stop - корректно останавливает

скрипт взял из вашей второй ссылки и немного подправил:

Код: Выделить всё

#!/bin/sh
#
# SysV Init script for DAEMONstration server (checkerd)
#
# pidfile: /home/alex/checker.pid
#
# Source function library.
. /etc/rc.d/init.d/functions

case $1 in
    start)
    echo -n "Starting checkerd"
    /home/alex/work/checker/checkerd start
    echo
    ;;
    stop)
    echo -n "Shutting down checkerd"
    /home/alex/work/checker/checkerd stop
    echo
    ;;
    restart)
    /home/alex/work/checker/checkerd restart
    echo
    ;;
    *)
    echo "Usage: $(basename $0) start|stop|restart"
    exit 1
esac
exit 0
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

кажется нужен /etc/rc.d/rc3.d, но тоже не срабатывает

PS: ASPLinux 11.2...
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

shade писал(а):apache2.2 - сделал симлинк /etc/rc.d/rc0.d/K16checkerd на /etc/init.d/checkerd - все равно не запускается.

А как проверял???
shade писал(а):кажется нужен /etc/rc.d/rc3.d, но тоже не срабатывает

я тоже думаю что он нужен.
А как проверял???


Возможно "не работает" потому что K означает Кill
а тебе нужен Start(S) и циферка 84 ;)

Может ты просто не заметил, что у апача есть не только файлики с K

Код: Выделить всё

$ find /etc/rc* -iname \[S\|K\]??httpd
/etc/rc.d/rc0.d/K15httpd
/etc/rc.d/rc1.d/K15httpd
/etc/rc.d/rc2.d/K15httpd
/etc/rc.d/rc3.d/S85httpd
/etc/rc.d/rc4.d/K15httpd
/etc/rc.d/rc5.d/K15httpd
/etc/rc.d/rc6.d/K15httpd
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

симлинки не надо создовать вручную.
это надо делать с помощью update-rc.d =)
хотя вручную тоже должно работать
а что сегодня профилактику решили на форуме сделать я не виноват =)
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Yogrik писал(а):А как проверял???

Перезагружался
ps axf | grep checkerd
cat checker.log

Yogrik писал(а):Возможно "не работает" потому что K означает Кill
а тебе нужен Start(S) и циферка 84

Теперь буду знать ;)
А почему именно 84?
Как правильно выбрать цифру? из каких соображений?
Когда запускаются скрипты начинающиеся на K?

Почитал про уровни выполнения, inittab и начал распутываться:
Я думал, что во время загрузки система последоватльно переходит из одного уровня выполнения в следующий. Оказывается она сразу попадает в необходимый - прописаный в initdefault или через вызов init N. Соответственно, т.к. у меня initdefault = 5, то симлинк нужно было создавать в /etc/rc.d/rc5.d/
Создал /etc/rc.d/rc5.d/S20checkerd и все заработало :D

Теперь вернемя к первому вопросу: "как написать (де)инстлятор?"
Демон должен работать в многопользовательском режиме + сеть, следовательно нужны rc3.d и rc5.d, нужен ли rc4.d не понятно..
Если я правильно понял, то при инсталяции нужно просто записать в /etc/rc.d/init.d/ сценарий запуска/останова демона, и создать в /etc/rc.d/rc3.d/ и /etc/rc.d/rc5.d/ симлинки с префиксом SXX, где XX двузначное число.
Повторюсь: как выбрать XX?
Нужно ли создавать симлинк с префиксом KXX? и какой номер указывать там? Как видно у apache номера не совпадают..

Все это было о системе инициализации SysV, а как быть с BSD? У меня в книжке написано, что они чем-то отличаются, а вот чем именно - ничего не сказано:
Системы инициализации BSD и SysV отличаются набором входящих в них файлов и назнчением.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Повторюсь: как выбрать XX?

бери побольше и не прогадаешь, выбирается исходя из других
скриптов, может где-то стандарт описан а так если твоя прога должна стартовать раньше апача и файберда то и ставишь цифру меньше чем у них. а закрываться уже после них то ставишь цифру больше (с префиксом К)

Нужно ли создавать симлинк с префиксом KXX?

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

кста можно просто
update-rc.d имя_скрипта defaults
и система сама решит где твоему творению стартовать =)
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

shade писал(а):Повторюсь: как выбрать XX?


В SysV всего 7 уровней:
0 выключение
1 однопользовательский режим
2 многопользовательский режим без сети
3 многопользовательский режим с сетью
4 считается зарезервированым но не встречал чтобы использовался
5 X
6 перезагрузка

0,6 частный случай в соответствующих rcX.d папка запускаются только Kxx скрипты

1-5 запускаются последовательно до твоего RunLevel
т.е. если ты запускаешь ядро с RunLevel=5 то запускаются скрипты 1,2,3,4,5 с пометкой S

в папках rcX.d:
Sxx запускаются при переходе на уровень X в продяке возрастания xx
Kxx запускаются при выходе с уровня X в порядке возрастания

Соответственно правило Sxx+Kxx=100, всеми любимый стек позже запустился, раньше выключился

PS с BSD не разбирался....:(

Все же мне кажется что это должно быть написано в ссылках выше
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Attid писал(а):кста можно просто
update-rc.d имя_скрипта defaults
и система сама решит где твоему творению стартовать =)

у мя нет update-rc.d =)
следовательно не универсально
следовательно не подходит
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

Attid писал(а):симлинки не надо создовать вручную.
это надо делать с помощью update-rc.d =)

Это спроное утверждение, хотя раз в debian советуют так делать
заничит скорее всего оно верное.....:)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

А в Слаквари тогда чего, BSD что-ли? Есть rc.M, rc.S, rc.K, rc.0 он же rc.6, в уголке скромно сидит rc.sysvinit, и нигде никаких циферок.
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

Sergei I. Gorelkin писал(а):А в Слаквари тогда чего, BSD что-ли? Есть rc.M, rc.S, rc.K, rc.0 он же rc.6, в уголке скромно сидит rc.sysvinit, и нигде никаких циферок.


rc.0 Останавливает систему (уровень запуска 0). По умолчанию он является символической ссылкой на rc.6.
rc.4 Многопользовательская работа (уровень запуска 4), но в X11 с KDM, GDM или XDM в качестве менеджера входа в систему.
rc.6 Перезагрузка системы (уровень запуска 6).
rc.K Работа в однопользовательском режиме (уровень запуска 1).
rc.M

Многопользовательский режим (уровни запуска 2 и 3), но со стандартным текстовым входом в систему. Это в Slackware уровень загрузки по умолчанию .

Все это настраивается в /etc/inittab
Но мое субъективное мнение что в Slackware сделали не по стандарту а как удобней автору
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

У меня такое ощущение, что самое надежное (в плане универсальности) - это прописать демона непосредственно в inittab :lol:
Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

shade писал(а):У меня такое ощущение, что самое надежное (в плане универсальности) - это прописать демона непосредственно в inittab :lol:

Я бы назвал это идеологически не правильно....
Ответить