Linux

init.d 腳本出錯

  • November 22, 2014

首先對不起我的英語不好

好的,我寫了一個 init.d 腳本,但我不知道它的真假(我是這方面的新手)

#!/bin/sh
. /etc/init.d/someserver

start () {
   echo -n $"Starting someserver.jar: "

   java -jar /home/someserver/someserver.jar &
   echo $! > /home/someserver/someserver.pid
}

stop () {
   echo -n $"Stopping someserver.jar: "

   PID=$(/home/someserver/someserver.pid) 
   kill -9 $PID
}

restart() {
   stop
   start
}

case $1 in
   start)
       start
   ;;
   stop)
       stop
   ;;
   *)

   echo $"Usage: someserver {start|stop}"
   exit 1
esac

之後我使用這個命令;

$ sudo chmod 755 /etc/init.d/someserver

$ sudo update-rc.d someserver defaults

我正在獲取此資訊;

insserv: warning: script 'someserver' missing LSB tags and overrides

/etc/init.d/someserver: 6: .: 3: Too many open files

我搜尋錯誤和資訊,但我不明白這是什麼意思,我該怎麼辦?

注意:os debian,我為 mmoni 寫這個

您是否查看過其他初始化腳本以供參考?

讓我們逐節瀏覽本節。首先讓我們命名一個要執行的shell。行。

#!/bin/sh

現在請按照 init 系統的建議將 LSB 標籤放在那裡(告訴 init 系統依賴關係)

### BEGIN INIT INFO
# Provides:          someserver
# Required-Start:    $syslog $network $remote_fs
# Required-Stop:     $syslog $remote_fs
# Should-Start:      $local_fs $named
# Should-Stop:       $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: someserver
# Description:       Some Server
### END INIT INFO

然後你獲取了初始化腳本本身,為什麼?這可能就是您提到的錯誤發生的原因,因為它被遞歸呼叫,這可能不是預期的。

通常你會獲取一些腳本來獲取配置:

# source some config (can be omitted)
[ -f /etc/configs/someserver ] && source /etc/configs/someserver

為什麼每個echo報表中都有美元符號?(好吧,本地化,我相信)

(注意:通過查看其他一些初始化腳本,您會看到 debian 使用 start-stop-daemon 來管理守護程序,因此您可以實現它。我在這裡不這樣做。)

start () {
   echo -n "Starting someserver.jar: "

   java -jar /home/someserver/someserver.jar &
   echo $! > /home/someserver/someserver.pid
}

你忘記了一個catin stop()

我也不一定kill -9,但首先kill。你可以檢查一下它是否真的消失了,然後kill -9。同樣,也許您應該使用start-stop-daemon.

stop () {
   echo -n "Stopping someserver.jar: "

   PID=$(cat /home/someserver/someserver.pid) 
   kill $PID
}

您通常希望在重新啟動之前稍等片刻

restart() {
   stop
   sleep 10
   start
}

最後,您還應該實施restart.

case "$1" in
   start)
     start
     ;;

   stop)
     stop
     ;;

   restart)
     restart
     ;;

   *)
     echo "Usage: someserver {start|stop|restart}"
     exit 1
     ;;
esac

不是那麼糟糕。但是你錯過了一些細節。

引用自:https://serverfault.com/questions/646276