Debian

使用 LSBInitScripts 在啟動時添加程序

  • July 15, 2013

我使用 Debian Lenny(我知道 lenny 很老,其他 bla bla)並且想在啟動時放置一個程序。我update-rc.d通過在/etc/init.d. 通過參考http://wiki.debian.org/LSBInitScripts,我需要在/etc/init.d/myprogram

### BEGIN INIT INFO
# Provides:          myprogram
# Required-Start:    $all
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

那麼我是否需要附加任何腳本,例如:

DAEMON_PATH="/home/myprogram"
DAEMON=node
DAEMONOPTS="-my opts"
NAME=node
DESC="myprogram"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case "$1" in
start)
   printf "%-50s" "Starting $NAME..."
   cd $DAEMON_PATH
   PID=`$DAEMON $DAEMONOPTS > /dev/null 2>&1 & echo $!`
   #echo "Saving PID" $PID " to " $PIDFILE
       if [ -z $PID ]; then
           printf "%s\n" "Fail"
       else
           echo $PID > $PIDFILE
           printf "%s\n" "Ok"
       fi
;;
status)
       printf "%-50s" "Checking $NAME..."
       if [ -f $PIDFILE ]; then
           PID=`cat $PIDFILE`
           if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
               printf "%s\n" "Process dead but pidfile exists"
           else
               echo "Running"
           fi
       else
           printf "%s\n" "Service not running"
       fi
;;
stop)
       printf "%-50s" "Stopping $NAME"
           PID=`cat $PIDFILE`
           cd $DAEMON_PATH
       if [ -f $PIDFILE ]; then
           kill -HUP $PID
           printf "%s\n" "Ok"
           rm -f $PIDFILE
       else
           printf "%s\n" "pidfile not found"
       fi
;;

restart)
   $0 stop
   $0 start
;;

*)
       echo "Usage: $0 {status|start|stop|restart}"
       exit 1
esac

我覺得 LSBInitScripts 和上面的腳本是不同的東西,但是當我檢查一些文件時/etc/init.d,它們有相似的腳本。您能否澄清我是否需要上述腳本。如果我需要使用上面的腳本,我需要創建一個 .pid 文件還是會自動創建?

就在這種情況下而言,它們是同一回事。LSB 資訊只是添加到腳本的 init 開頭的 shell 註釋形式的元數據。

只需將這兩個塊結合起來。它應該包含:

  1. 解釋器行(例如,#!/bin/sh
  2. LSB 資訊,根據您的應用程序的需要進行編輯。
  3. 腳本的其餘部分(啟動/停止函式等)。

如果您需要一個範例,您可以查看/etc/init.d/skeleton. 完成後,將文件放入/etc/init.d/並使用insserv,而不是update-rc.d安裝符號連結。

引用自:https://unix.stackexchange.com/questions/83155