LINUX.ORG.RU

Сообщения ILYA

 

Создание 2-ух демонов, ссылающихся на один и тот же объект, но с разным конфигом.

Как в openSUSE (init.d rc) создать 2 deamon-а mpd и radio на 1 и тот же объект /usr/bin/mpd но с разными конфигами, логами и pid-файлами, что бы можно было независимо управлять ими (запускать перезапускать и останавливать без влияния друг на друга) ?

Написал 2 демона: /etc/init.d/mpd

#! /bin/sh
#
# Author: Davide Lucchesi <odiobill@despammed.com>, 2003
#
# /etc/init.d/mpd
#
# and its symbolic link
#
# /usr/sbin/rcmpd
#
# System startup script for the Music Player Daemon.
#
### BEGIN INIT INFO
# Provides: mpd
# Required-Start: $network $remote_fs
# Should-Start: alsasound icecast
# Required-Stop: $network
# Should-Stop: alsasound icecast
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: This script takes care of managing the Music Player Daemon
### END INIT INFO

. /etc/rc.status

# Reset status of this service
rc_reset

MPD_BIN="/usr/bin/mpd"
MPD_CFG="/etc/mpd.conf"
MPD_PID="/var/lib/mpd/mpd.pid"
test -x $MPD_BIN || &#123;
&nbsp; &nbsp;echo "$MPD_BIN not installed";
&nbsp; &nbsp;if &#91; "$1" = "stop" &#93; ; then
&nbsp; &nbsp;&nbsp; &nbsp;exit 0
&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp;exit 5
&nbsp; &nbsp;fi
&nbsp; &nbsp;&#125;

case "$1" in
&nbsp; &nbsp;start)
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Starting mpd "
&nbsp; &nbsp;&nbsp; &nbsp;startproc $MPD_BIN $MPD_CFG
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;stop)
&nbsp; &nbsp;&nbsp; &nbsp;test -e $MPD_PID || &#123;
&nbsp; &nbsp;&nbsp; &nbsp;echo "$MPD_PID doesn't exist!"
&nbsp; &nbsp;&nbsp; &nbsp;exit 0
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Shutting down mpd "
&nbsp; &nbsp;&nbsp; &nbsp;$MPD_BIN --kill
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;try-restart)
&nbsp; &nbsp;&nbsp; &nbsp;$0 status
&nbsp; &nbsp;&nbsp; &nbsp;if test $? = 0; then
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$0 restart
&nbsp; &nbsp;&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;rc_reset
&nbsp; &nbsp;&nbsp; &nbsp;fi
&nbsp; &nbsp;&nbsp; &nbsp;rc_status
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;restart)
&nbsp; &nbsp;&nbsp; &nbsp;$0 stop
&nbsp; &nbsp;&nbsp; &nbsp;$0 start
&nbsp; &nbsp;&nbsp; &nbsp;rc_status
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;status)
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Checking for mpd: "
&nbsp; &nbsp;&nbsp; &nbsp;checkproc $MPD_BIN
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;*)
&nbsp; &nbsp;&nbsp; &nbsp;echo "Usage: $0 &#123;start|stop|try-restart|restart|status&#125;"
&nbsp; &nbsp;&nbsp; &nbsp;exit 1
&nbsp; &nbsp;&nbsp; &nbsp;;;
esac
rc_exit

и /etc/init.d/radio

/etc/init.d/radio

#! /bin/sh
#
# Author: Davide Lucchesi <odiobill@despammed.com>, 2003
#
# /etc/init.d/radio
#
# and its symbolic link
#
# /usr/sbin/rcradio
#
# System startup script for the Classic Rock Radio.
#
### BEGIN INIT INFO
# Provides: radio
# Required-Start: $network $remote_fs
# Should-Start: alsasound icecast
# Required-Stop: $network
# Should-Stop: alsasound icecast
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: This script takes care of managing Classic Rock Radio
### END INIT INFO

. /etc/rc.status

# Reset status of this service
rc_reset

BIN="/usr/bin/mpd"
CFG="/etc/radio.conf"
PID="/var/lib/mpd/radio.pid"
test -x $BIN || &#123;
&nbsp; &nbsp;echo "$BIN not installed";
&nbsp; &nbsp;if &#91; "$1" = "stop" &#93; ; then
&nbsp; &nbsp;&nbsp; &nbsp;exit 0
&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp;exit 5
&nbsp; &nbsp;fi
&nbsp; &nbsp;&#125;

case "$1" in
&nbsp; &nbsp;start)
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Starting Classic Rock Radio "
&nbsp; &nbsp;&nbsp; &nbsp;startproc $BIN $CFG
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;stop)
&nbsp; &nbsp;&nbsp; &nbsp;test -e $PID || &#123;
&nbsp; &nbsp;&nbsp; &nbsp;echo "$PID doesn't exist!"
&nbsp; &nbsp;&nbsp; &nbsp;exit 0
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Shutting down Classic Rock Radio "
&nbsp; &nbsp;&nbsp; &nbsp;$BIN --kill
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;try-restart)
&nbsp; &nbsp;&nbsp; &nbsp;$0 status
&nbsp; &nbsp;&nbsp; &nbsp;if test $? = 0; then
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$0 restart
&nbsp; &nbsp;&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;rc_reset
&nbsp; &nbsp;&nbsp; &nbsp;fi
&nbsp; &nbsp;&nbsp; &nbsp;rc_status
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;restart)
&nbsp; &nbsp;&nbsp; &nbsp;$0 stop
&nbsp; &nbsp;&nbsp; &nbsp;$0 start
&nbsp; &nbsp;&nbsp; &nbsp;rc_status
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;status)
&nbsp; &nbsp;&nbsp; &nbsp;echo -n "Checking for Classic Rock Radio: "
&nbsp; &nbsp;&nbsp; &nbsp;checkproc $BIN
&nbsp; &nbsp;&nbsp; &nbsp;rc_status -v
&nbsp; &nbsp;&nbsp; &nbsp;;;
&nbsp; &nbsp;*)
&nbsp; &nbsp;&nbsp; &nbsp;echo "Usage: $0 &#123;start|stop|try-restart|restart|status&#125;"
&nbsp; &nbsp;&nbsp; &nbsp;exit 1
&nbsp; &nbsp;&nbsp; &nbsp;;;
esac
rc_exit

Создал конфиги логи пиды стейты, и установил владельца mpd:audio           Все необходимые файлы в /var/lib/mpd и /var/log создал, установив владелбцем mpd:audio Через YaST создал демон, установил на запуск в 3 и 5 и запустил, но при запуске одного вылетает другой, и при попытке перезапустить его пишет /var/lib/mpd/radio.pid doesn't exist! Хотя в /var/lib/mpd/ оба пида существуют и права у них 775 mpd:audio

Естественно если /usr/bin/mpd клонировать в /usr/bin/radio и привязать демон radio на него, то всё работает, но для меня это НЕ выход. Это уже НЕ ООП.

В чём проблема и что я не учёл ?

ILYA
()

RSS подписка на новые темы