Демоны

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

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

Демоны

Сообщение shade » 11.04.2007 22:49:25

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

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

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

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

Контекст:
1. Конечный пользователь почти ламер (в Linux), поэтому сам ковырять конфигфайлы и скрипты не сможет;
2. Желательно, чтобы поддерживалось как можно больше дистрибутивов или вообще от них не зависело.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Демоны

Сообщение Attid » 12.04.2007 00:06:00

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

тут
и тут

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

по второй ссылке есть скрипт который надо положить к каталог /etc/rc.d/init.d/ или /etc/init.d/ в зависимости от системы, может есть еще какие =) ну и выбием после чего и при каких загрузках запускаем пример тут
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение shade » 12.04.2007 16:52:51

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 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 12.04.2007 17:44:04

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

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

Сообщение Yogrik » 12.04.2007 18:48:48

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
Yogrik
постоялец
 
Сообщения: 116
Зарегистрирован: 23.03.2006 00:41:48

Сообщение Attid » 12.04.2007 19:32:01

симлинки не надо создовать вручную.
это надо делать с помощью update-rc.d =)
хотя вручную тоже должно работать
а что сегодня профилактику решили на форуме сделать я не виноват =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение shade » 12.04.2007 19:35:47

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 отличаются набором входящих в них файлов и назнчением.
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Attid » 12.04.2007 20:15:26

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

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

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

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

кста можно просто
update-rc.d имя_скрипта defaults
и система сама решит где твоему творению стартовать =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Yogrik » 12.04.2007 21:03:56

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 не разбирался....:(

Все же мне кажется что это должно быть написано в ссылках выше
Yogrik
постоялец
 
Сообщения: 116
Зарегистрирован: 23.03.2006 00:41:48

Сообщение shade » 12.04.2007 21:07:23

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

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

Сообщение Yogrik » 12.04.2007 21:09:50

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

Это спроное утверждение, хотя раз в debian советуют так делать
заничит скорее всего оно верное.....:)
Yogrik
постоялец
 
Сообщения: 116
Зарегистрирован: 23.03.2006 00:41:48

Сообщение Sergei I. Gorelkin » 12.04.2007 21:18:55

А в Слаквари тогда чего, BSD что-ли? Есть rc.M, rc.S, rc.K, rc.0 он же rc.6, в уголке скромно сидит rc.sysvinit, и нигде никаких циферок.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Yogrik » 12.04.2007 21:29:30

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 сделали не по стандарту а как удобней автору
Yogrik
постоялец
 
Сообщения: 116
Зарегистрирован: 23.03.2006 00:41:48

Сообщение shade » 12.04.2007 21:37:34

У меня такое ощущение, что самое надежное (в плане универсальности) - это прописать демона непосредственно в inittab :lol:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Yogrik » 12.04.2007 21:42:18

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

Я бы назвал это идеологически не правильно....
Yogrik
постоялец
 
Сообщения: 116
Зарегистрирован: 23.03.2006 00:41:48

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru