Демоны

By Igor

Вначале немного информации. Демон – это фоновый процесс, предназначенный для автономного запуска, с небольшим участием пользователя. Обычно демоны лежат в /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 коммент. на “Демоны”

  1. Roman Lagunov:

    @Igor:

    Как все у вас в slackware сложно с демонами – то писать их самому, то «отключать».

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

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

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

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

    TDTTOE.

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

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

  2. Igor:

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

  3. fireant:

    @Igor:

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

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

  4. Alex:

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

  5. Igor:

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

Комментарии закрыты.