LINUX.ORG.RU
ФорумAdmin

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


0

1

Как в 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 на него, то всё работает, но для меня это НЕ выход. Это уже НЕ ООП.

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


Конфиги

/etc/mpd.conf

[code]# Files and directories

music_directory            «/ILYA/Music» playlist_directory         «/var/lib/mpd/playlists» db_file               «/var/lib/mpd/mpd.db» log_file            «syslog» pid_file            «/var/lib/mpd/mpd.pid» state_file            «/var/lib/mpd/mpdstate»

# General music daemon options

user               «mpd» bind_to_address            «any» port               «6600» gapless_mp3_playback         «yes» save_absolute_paths_in_playlists   «no» metadata_to_use            «artist,album,title,track,genre,date»

# Symbolic link behavior

follow_outside_symlinks         «yes» follow_inside_symlinks         «yes»

# Zeroconf / Avahi Service Discovery

zeroconf_enabled         «no» zeroconf_name            «Music Player»

# Permissions

password            «password_hidden@read,add,control,admin» default_permissions         «read»

# Audio Input

#input { # plugin «curl» # proxy «proxy.isp.com:8080» # proxy_user «» # proxy_password «» #}

# Audio Output

audio_output {    type «alsa»    name «ALSA» ##   device «hw:1,0» # optional ##   format «44100:16:2» # optional ##   mixer_device «default» # optional ##   mixer_control «PCM» # optional ##   mixer_index   «0» # optional }

#audio_output { #   type «httpd» #   port «8000» #   name «Classic Rock Radio» #   format «44100:16:2» #   encoder «vorbis» # optional, vorbis or lame #   quality «6.0» # do not define if bitrate is defined ##   bitrate «192» # do not define if quality is defined #}

# Normalization automatic volume adjustments

volume_normalization         «no» #audio_buffer_size         «2048» #buffer_before_play         «10%»

# Resource Limitations

#connection_timeout         «60» #max_connections         «10» #max_playlist_length         «16384» #max_command_list_size         «2048» #max_output_buffer_size         «8192»

# Character Encoding

filesystem_charset         «UTF-8» id3v1_encoding            «CP1251»[/code]

и /etc/radio.conf

[code]# Files and directories

music_directory            «/ILYA/Music» playlist_directory         «/var/lib/mpd/playlists» db_file               «/var/lib/mpd/mpd.db» log_file            «/var/log/radio.log» pid_file            «/var/lib/mpd/radio.pid» state_file            «/var/lib/mpd/radiostate»

# General music daemon options

user               «mpd» bind_to_address            «any» port               «6601» gapless_mp3_playback         «yes» save_absolute_paths_in_playlists   «no» metadata_to_use            «artist,album,title,track,genre,date»

# Symbolic link behavior

follow_outside_symlinks         «yes» follow_inside_symlinks         «yes»

# Zeroconf / Avahi Service Discovery

zeroconf_enabled         «no» zeroconf_name            «Music Player»

# Permissions

password            «password_hidden@read,add,control,admin» default_permissions         «read»

# Audio Input

#input { # plugin «curl» # proxy «proxy.isp.com:8080» # proxy_user «» # proxy_password «» #}

# Audio Output

#audio_output { #   type «alsa» #   name «ALSA» ##   device «hw:1,0» # optional ##   format «44100:16:2» # optional ##   mixer_device «default» # optional ##   mixer_control «PCM» # optional ##   mixer_index   «0» # optional #}

audio_output {    type «httpd»    port «8000»    name «Classic Rock Radio»    format «44100:16:2»    encoder «vorbis» # optional, vorbis or lame    quality «6.0» # do not define if bitrate is defined ##   bitrate «192» # do not define if quality is defined }

# Normalization automatic volume adjustments

volume_normalization         «no» #audio_buffer_size         «2048» #buffer_before_play         «10%»

# Resource Limitations

#connection_timeout         «60» #max_connections         «10» #max_playlist_length         «16384» #max_command_list_size         «2048» #max_output_buffer_size         «8192»

# Character Encoding

filesystem_charset         «UTF-8» id3v1_encoding            «CP1251»[/code]

ILYA ()
Ответ на: комментарий от Led

А как создаётся псевдопользователя ?

А как псевдопользователь ? Через useradd или что то ещё ? Например radio относящийся к группе audio ? У меня через YaST отображаюсь только я, а wwwrun, mysql. postfix, mpd и прочие вообще не знаю откуда берутся, но если я в конфиге прописываю запускать радио от radio мне говорит что нет такого пользователя.

ILYA ()
Ответ на: А как создаётся псевдопользователя ? от ILYA

>А как псевдопользователь ? Через useradd или что то ещё ? Например radio относящийся к группе audio ?

Как вариант

postfix, mpd и прочие вообще не знаю откуда берутся

оттуда же, откуда и остальные

но если я в конфиге прописываю запускать радио от radio мне говорит что нет такого пользователя

заведи

В моём дистрибутиве, например:

$ grep mpd /etc/passwd

_mpd:x:128:94:Music Player Daemon (MPD):/home/_mpd:/dev/null

т.е. системный пользователь для системного mpd уже есть «из-коробки». Никто не запрещает добавать ещё, скажем, аналогичного пользователя _radio

Led ★★★☆☆ ()
Ответ на: комментарий от Led

И всё равно не хочет понимать ООП

Создал я псевдопользователя волшебной командой: useradd -r -G audio -s /bin/false radio -d /var/lib/radio

В конфиге radio полностью перевёл все плейлисты, пиды, стейты, и даже БД в папку /var/lib/radio, перевёл запуск на пользователя radio В демоне всё то же переписал, оставил лиш 1 строчку общую, в которой упоминается mpd (BIN=«/usr/bin/mpd»).

И всё равно они не могут работать и управляться параллельно... Хрен с ним, изменил и её на BIN='/usr/bin/radio' в /usr/bin создал символьную ссылку radio на объект mpd ... Они теперь уже и запускаются не только с разными, пидами, с разными пользователями, но и процессы теперь с разными именами... И что вы думаете... 1 хрен при запуске одного совершенно отказывается запускаться второй, зотя в команде говорит что мол done.

Только если тупо скопипастить, вместо создания символьной ссылки, они работают нормально и как надо...

Что же я всё таки делаю не так ? Не ужели демоны не умеют работать с объектами ?

ILYA ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.