Скрипт демона SHOUTcast не работает должным образом

У меня есть сервер SHOUTcast, работающий в Ubuntu. Процесс на сервере работает отлично, но я не могу заставить скрипт скрипта работать нормально. После пары обучающих программ, которые я обнаружил, я придумал это:

#!/bin/sh

CONFIG="/home/apps/shout32/sc_plex.conf"
DAEMON="/home/apps/shout32/sc_serv"

case "$1" in
    start)
        echo "Starting SC..."
        $DAEMON $CONFIG > /dev/null 2>&1 &
        ;;
    stop)
        echo "Stopping SC..."
        kill -9 `ps -C sc_serv -o pid --no-headers`
        ;;
    restart)
        echo "Rebooting SC..."
        kill -9 `ps -C sc_serv -o pid --no-headers`
        $DAEMON $CONFIG > /dev/null 2>&1 &
        ;;
    *)
        echo "usage: service sc32d {start | stop | restart}"
        exit 1
        ;;
esac

Это, однако, не работает. Я не знал, что это значило, поэтому я начал разбивать его по строкам. Если я удаляю материал / dev / null, который, как я теперь понимаю, программа работает в фоновом режиме "без звука", я получаю это сообщение, и программа закрывается:

root@streams3:/etc/init.d# service sc32d start
Starting SC...
root@streams3:/etc/init.d# 2013-05-21 14:41:50  E       msg:<***>       logger could not open file logs/sc_serv.log
2013-05-21 14:41:50     I       msg:<***>       Logger shutdown

root@streams3:/etc/init.d#
root@streams3:/etc/init.d# ps -C sc_serv
  PID TTY          TIME CMD
root@streams3:/etc/init.d#

Я все еще находился в процессе изучения того, что именно / dev / null сделал и почему, поэтому я хотел запускать эти команды со всеми вещами / dev / null вручную, что я и сделал, и вот где я получил некоторый код ошибки:

root@streams3:/etc/init.d# /home/apps/shout32/sc_serv /home/apps/shout32/sc_plex.conf > /dev/null 2>&1 &
[2] 2261
root@streams3:/etc/init.d#
[2]-  Exit 255                /home/apps/shout32/sc_serv /home/apps/shout32/sc_plex.conf > /dev/null 2>&1
root@streams3:/etc/init.d# ps -C sc_serv
  PID TTY          TIME CMD

К сожалению, после краткого исследования, которое я провел, звучит так, как будто "Выход 225" подобен универсальному коду ошибки для кодов, которые находятся за пределами допустимого диапазона кодов.

Интересная часть всей проблемы заключается в следующем: когда я перехожу в папку /home/apps/shout32/ и запускаю там команды без полного пути... чертовски хорошо работает:

root@streams3:/home/apps/shout32# ./sc_serv sc_plex.conf > /dev/null 2>&1 &
[2] 2245
root@streams3:/home/apps/shout32#
root@streams3:/home/apps/shout32# ps -C sc_serv
  PID TTY          TIME CMD
 2245 pts/0    00:00:00 sc_serv

Итак, что-то не так, потому что файл скрипта находится в /etc/init.d/, а не в папке, в которой находится приложение? Насколько я знаю, я следовал каждому шагу в опубликованных руководствах по настройке SHOUTcast в Ubuntu, а затем по созданию демона... Не думаю, что я что-то пропустил. У меня такое ощущение, что решение - это либо смотреть мне прямо в лицо, либо что-то вроде неясных разрешений, что немного над моей головой.

Но любая помощь будет принята с благодарностью!


Итак, основываясь на ответе ниже, я добавил cd /home/apps/shout32/ к команде START в моем скрипте, а также добавил pwd и ls..., чтобы посмотреть, сможем ли мы устранить тот факт, что скрипт не может найти / журнал / каталог.

Итак, теперь мой сценарий:

CONFIG="/home/apps/shout32/sc_plex.conf"
DAEMON="/home/apps/shout32/sc_serv"

cd /home/apps/shout32/

case "$1" in
        start)
                echo "Starting SC..."
                cd /home/apps/shout32/
                pwd
                ls
                $DAEMON $CONFIG &
                ;;
        stop)
                echo "Stopping SC..."
                kill -9 `ps -C sc_serv -o pid --no-headers`
                ;;
        restart)
                echo "Rebooting SC..."
                kill -9 `ps -C sc_serv -o pid --no-headers`
                $DAEMON $CONFIG &
                ;;
        *)
                echo "usage: service sc32d {start | stop | restart}"
                exit 1
                ;;
esac

Я получил это:

admin@streams3:/etc/init.d$ service sc32d start
Starting SC...
/home/apps/shout32
changes.txt     readme.txt                     sc_serv_debug.conf
config_builder  sc_plex.conf                   sc_serv_public.conf
control         sc_serv                        sc_serv_relay.conf
docs            sc_serv2_linux_07_31_2011.tar  sc_serv_simple.conf
logs            sc_serv_basic.conf             tos.txt
admin@streams3:/etc/init.d$ 2013-06-05 17:52:08      E       msg:<***>      logger could not open file logs/sc_serv.log
2013-06-05 17:52:08     I       msg:<***>       Logger shutdown

1 ответ

Решение

Ваш второй фрагмент содержит logger could not open file logs/sc_serv.log, Таким образом, он пытается записать в файл sc_serv.log который он ожидает или хочет создать в каталоге logs что он ожидает в текущем каталоге. Это также объясняет, что это работает, когда вы переходите к /home/apps/shout32/ first. Я думаю, что есть файл /home/apps/shout32/logs/sc_serv.log,

Вы можете настроить местоположение этого файла? ты не можешь просто добавить немного cd ... в начале сценария?

Другие вопросы по тегам