Linux
init.d 腳本出錯
首先對不起我的英語不好
好的,我寫了一個 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 }
你忘記了一個
cat
instop()
。我也不一定
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
不是那麼糟糕。但是你錯過了一些細節。