Демоны

Вначале немного информации. Демон - это фоновый процесс, предназначенный для автономного запуска, с небольшим участием пользователя. Обычно демоны лежат в /etc/rc.d, имеют исполняемый бит, а также способы управления: start, restart, stop.
В некоторых дистрибутивах (например, Slackware) исполняемые при загрузке демоны записаны в файл rc.M, имеют атрибут +x (где и прописывается способ выбора демонов для запуска - либо все исполняемые файлы в /etc/rc.d, либо просто перечислены демоны для запуска), в других же список нужных демонов при загрузке лежит в каком-нибудь файле типа rc.conf. Многие демоны при загрузке системы не нужны (например, я не нуждаюсь в “серверных” демонах типа apache, vsftpd и т. д.), поэтому их можно безболезненно отключить. В первом случае можно просто убрать исполняемый бит с файла-демона, а во втором убрать демон из списка и занести его в “чёрный список”.

Недавно я собирал пакет mpd для Slackware, поэтому мне пришлось собственноручно написать демон rc.mpd:
#!/bin/bash
PID=`pidof -o %PPID /usr/bin/mpd /etc/mpd.conf`
case “$1″ in
start)
echo “Starting Music Player Daemon”
[ -z "$PID" ] && /usr/bin/mpd /etc/mpd.conf &> /dev/null
if [ $? -gt 0 ]; then
echo “failed…”
else
echo $PID > /var/run/mpd.pid
echo “done…”
fi
;;
stop)
echo “Stopping Music Player Daemon”
[ ! -z "$PID" ] && kill $PID &> /dev/null
if [ $? -gt 0 ]; then
echo “failed to stop…”
else
rm /var/run/mpd.pid
pkill mpd
fi
;;

restart)
$0 stop
sleep 1
$0 start
;;
*)
echo “usage: $0 {start|stop|restart}”
esac
exit 0

Из примера видно, что файл-демон - это простой sh-скрипт, которому подаются в данном случае три команды, на которые он реагирует соответствующим образом.
Демон можно внести в rc.M, но тогда хорошим тоном будет вписать его в rc.K и rc.6
P.S. насколько я понимаю, стиль загрузки Slackware - BSD SysInit, а у Archlinux и Gentoo - System V Init.

5 коммент. to “Демоны”

  1. Roman Lagunov Says:

    @Igor:

    Как все у вас в slackware сложно с демонами - то писать их самому, то “отключать”.

    Нужен мне “демон” mpd или нет, у меня спросили при установке пакета mpd, если же мне не нужен “серверный демон” apache, то я просто удалю пакет, а если мне apache нужен (а мне он нужен) то и демон у меня будет.

    Вот не нужно мне, что бы у меня ntpdate запускался при старте системы, так я в /etc/init.d/ntpdate в начало написал exit 0 - все, никаких проблем.

    Как все-таки приятно, когда разработчики твоего дистрибутива заботятся о том, что бы все работало как надо.

    Не хватало еще скрипты для загрузки руками писать - у меня более важные дела есть.

    TDTTOE.

    Но пример скрипта хороший, я для общего развития даже просмотрел его по диагонали :)

    И тут же я посмотрел, какой у меня в debian скрипт демона mpd. Довольно-таки развеситый - 117 строчек, вместе с комментариями. С тучей проверок, в частности на наличие базы mpd.
    Могу выслать, для ознакомления :)

  2. Igor Says:

    Быстро же, всего минута, а скрипт уже и готов ;)
    Некоторые демоны иногда нужны, но не во время загрузки системы (например, cups). А некоторые иногда хочется, чтобы были загружены при старте, а иногда - нет. Во всяком случае, управлять эффективно ими стоит уметь, мне кажется.
    Думаю, если поискать пакет mpd, то хорошие шансы, что и демон там будет. Например, в пакете ArchLinux демон есть.

  3. fireant Says:

    @Igor:

    Насчет того, что управлять эффективно демонами стоит уметь, я спорить не буду.

    Но думаю, что с написанием скриптов для их запуска девелоперы debian справляются лучше, чем я :)

  4. Alex Says:

    А на С++ демона как написать?

  5. Igor Says:

    1. на фиг?
    2. системное программирование на C, думаю поиск по этим словам..

Ответить