Linux

從頭開始的 Debian 初始化腳本

  • August 30, 2011

我正在嘗試為 Debian / Ubuntu 的 SCST iSCSI 目標軟體編寫一個初始化腳本。下載中的目前版本不起作用,並且似乎可以在 SuSE 和其他系統上執行。

這是我到目前為止所擁有的,但我是基於我對初始化腳本和大量Google搜尋的有限了解。

我只是想知道我是否在想這個,每次停止腳本時是否需要解除安裝模組。啟動時不載入模組,我知道我需要啟動 iscsi 守護程序並載入配置。

任何幫助,將不勝感激。

#!/bin/sh

DAEMON=/usr/local/sbin/iscsi-scstd
PIDFILE=/var/run/iscsi-scstd.pid
CONFIG=/etc/scst/scst.conf

case "$1" in

start)
   echo "Starting SCST iSCSI target service: "
   modprobe scst
   modprobe scst_vdisk
   modprobe iscsi_scst
   start-stop-daemon --start --quiet --exec $DAEMON
   scstadmin -config $CONFIG
   $RETVAL=$?
   if [ $RETVAL == "0" ]; then
       echo -n "Success"
   fi
   ;;

stop)
   echo "Stopping SCST iSCSI target service: "
   modprobe -r scst
   modprobe -r scst_vdisk
   modprobe -r iscsi_scst
   start-stop-daemon --stop --quiet --exec $DAEMON --pidfile $PIDFILE
   $RETVAL=$?
   if [ $RETVAL == "3" ]; then
       echo -n "Success"
   fi
   if [ $RETVAL == "1" ]; then
       rm -f $PIDFILE
       echo -n "Success"
   fi
   ;;

restart)
   echo "Stopping SCST iSCSI target service: "
   modprobe -r scst
   modprobe -r scst_vdisk
   modprobe -r iscsi_scst
   start-stop-daemon --stop --quiet --exec $DAEMON --pidfile $PIDFILE
   sleep 2
   echo "Stopping SCST iSCSI target service: "
   modprobe scst
   modprobe scst_vdisk
   modprobe iscsi_scst
   start-stop-daemon --start --quiet --exec $DAEMON
   scstadmin -config $CONFIG
   ;;

status)
   $RETVAL=$?
   if [ $RETVAL == "0" ]; then
       echo -n "SCST iSCSI target service is running"
   fi
   if [ $RETVAL == "3" ]; then
       echo -n "SCST iSCSI target service is not running"
   fi
   if [ $RETVAL == "4" ]; then
       echo -n "SCST iSCSI target service is unknown"
   fi  


*)
   echo "Usage: /etc/init.d/scst {start|stop|restart}"
   exit 1

esac

exit 0

實際上,我最終找到了我在舊的 Ubuntu PPA 中為我的 iSCSI 目標尋找的東西。所以這個問題幾乎沒有實際意義。

Debian Squeeze 正在轉向基於依賴關係的 init 腳本排序,而不是按順序對腳本進行編號。如果您想使用它,您需要在腳本中添加特殊註釋以供insservupdate-rc.d替換)使用。

在 Debian 的 wiki 上有一個編寫“正確”初始化腳本的指南

Ubuntu 已經upstart替換了 init,但保留了一個 init 兼容系統,因此您按照 Debian 的規則編寫的 init 腳本應該在 Ubuntu 中正常工作。否則,您可以編寫一個 upstart 服務文件(Ubuntu 的 wiki 上給出了一個太基本的滿足您需要的範例)

至於其餘部分,可能不需要解除安裝模組(並且並非總是可能)。如果您確實解除安裝了模組,我會假設它們需要在服務停止後解除安裝。如果稍後啟動的模組依賴於較早啟動的模組,您可能還需要顛倒解除安裝模組的順序。根據守護程序從“啟動”到“準備好將配置載入到其中”的速度,您可能需要sleep 1在其中執行scstadmin(或者您可能不需要。只是需要注意它失敗了。)

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