2013-05-21 91 views
6

我有一個在Ubuntu上運行的SHOUTcast服務器。服務器進程運行良好,但我似乎無法讓守護進程腳本正常運行。以下幾個教程,我發現我想出了這個:SHOUTcast守護進程腳本運行不正常

#!/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的東西 - 這是我現在明白保持了程序運行的「沉默」的背景 - 我得到這個消息,該程序關閉:

[email protected]:/etc/init.d# service sc32d start 
Starting SC... 
[email protected]:/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 

[email protected]:/etc/init.d# 
[email protected]:/etc/init.d# ps -C sc_serv 
    PID TTY   TIME CMD 
[email protected]:/etc/init.d# 

我還在過程研究究竟是什麼的/ dev/null的做了,爲什麼,所以我想跑與手都在/ dev/null的東西,我做到了這些命令,而這也正是我得到了某種錯誤代碼:

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

不幸的是,從簡短的研究數量來看,我聽起來像'退出225'就像是一個全面的代碼錯誤代碼,超出了可接受的代碼範圍。

整個問題的有趣的部分是這樣的:當我瀏覽到/ home /應用/ shout32 /文件夾,然後運行命令在那裏,不完整的路徑...該死的東西的工作原理:

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

所以,有些東西搞亂了,因爲腳本文件在/etc/init.d/中,而不是在應用程序所在的文件夾中?據我所知,我遵循已發佈的教程中的每一步,在Ubuntu中設置SHOUTcast,然後創建一個守護進程...我不認爲我錯過了任何東西。我有一種感覺,解決方案是要麼直視我的臉,要麼是某種晦澀難懂的權限,這有點凌駕於我的頭上。

但任何幫助將不勝感激!


因此,基於一個答案下面我加了CD /家庭/應用/ shout32 /在我的腳本START命令,還增加了PWD和ls ......,看看我們是否可以消除的事實,腳本找不到/ log /目錄。

所以現在我的腳本是:

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 

我得到這個:

[email protected]:/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 
[email protected]:/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 

回答

2

你的第二個片段包含logger could not open file logs/sc_serv.log。因此,它會嘗試寫入文件,該文件或者期望或想要在目錄logs中創建,它在當前目錄中預期。這也解釋了當你cd到/ home/apps/shout32/first時它可以工作。我想有一個文件/home/apps/shout32/logs/sc_serv.log

你能配置該文件的位置嗎? 難道你不能只在腳本的開頭添加一些cd ...

+0

是的,在我的OP後我自己的故障排除中,我確定這是與/ logs有關的事情。確實有一個/home/apps/shout32/logs/sc_serv.log我試着改變文件夾/文件的權限和內容......但是你的建議並沒有超出我的想法。我如何直接將腳本操作,就好像它在X目錄中一樣? –

+0

哦!我看到你在說什麼,只需用cd/home/apps/shout32啓動腳本....讓我現在就去試試吧! –

+0

我更新了OP的結果,沒有運氣。也許我很嚴重誤解你的建議。 –

相關問題