Вначале немного информации. Демон – это фоновый процесс, предназначенный для автономного запуска, с небольшим участием пользователя. Обычно демоны лежат в /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.
Ноябрь 17, 2006 в 7:20 дп
@Igor:
Как все у вас в slackware сложно с демонами – то писать их самому, то «отключать».
Нужен мне «демон» mpd или нет, у меня спросили при установке пакета mpd, если же мне не нужен «серверный демон» apache, то я просто удалю пакет, а если мне apache нужен (а мне он нужен) то и демон у меня будет.
Вот не нужно мне, что бы у меня ntpdate запускался при старте системы, так я в
/etc/init.d/ntpdateв начало написалexit 0– все, никаких проблем.Как все-таки приятно, когда разработчики твоего дистрибутива заботятся о том, что бы все работало как надо.
Не хватало еще скрипты для загрузки руками писать – у меня более важные дела есть.
TDTTOE.
Но пример скрипта хороший, я для общего развития даже просмотрел его по диагонали :)
И тут же я посмотрел, какой у меня в debian скрипт демона mpd. Довольно-таки развеситый – 117 строчек, вместе с комментариями. С тучей проверок, в частности на наличие базы mpd.
Могу выслать, для ознакомления :)
Ноябрь 17, 2006 в 5:11 пп
Быстро же, всего минута, а скрипт уже и готов ;)
Некоторые демоны иногда нужны, но не во время загрузки системы (например, cups). А некоторые иногда хочется, чтобы были загружены при старте, а иногда – нет. Во всяком случае, управлять эффективно ими стоит уметь, мне кажется.
Думаю, если поискать пакет mpd, то хорошие шансы, что и демон там будет. Например, в пакете ArchLinux демон есть.
Ноябрь 18, 2006 в 5:39 дп
@Igor:
Насчет того, что управлять эффективно демонами стоит уметь, я спорить не буду.
Но думаю, что с написанием скриптов для их запуска девелоперы debian справляются лучше, чем я :)
Июнь 16, 2008 в 6:31 дп
А на С++ демона как написать?
Июнь 16, 2008 в 7:42 дп
1. на фиг?
2. системное программирование на C, думаю поиск по этим словам..