从头开始的 Debian 初始化脚本

从头开始的 Debian 初始化脚本

我正在尝试为 Debian / Ubuntu 的 SCST iSCSI 目标软件编写一个初始化脚本。下载中的当前脚本不起作用,似乎适用于 SuSE 和其他系统。

这是我目前所拥有的,但我是基于我对初始化脚本的有限了解和大量的谷歌搜索得出的结论。

我只是想知道我是否想得太多了,每次停止脚本时我是否都需要卸载模块。启动时模块不加载,我知道我需要启动 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 目标的内容。所以这个问题几乎没有意义。

答案1

Debian Squeeze 正在转向基于依赖关系的初始化脚本排序,而不是按顺序对脚本进行编号。如果您要使用这种方式,则需要在脚本中添加特殊注释,以便insservupdate-rc.d替换)使用。

Debian 的 wiki 上有一篇关于编写“正确”初始化脚本的指南这里

Ubuntu 已经用upstartinit 来替代它,但保留了 init 兼容系统,因此你编写的 init 脚本遵循 Debian 的规则应该在 Ubuntu 中正常工作。否则,您可以编写一个 upstart 服务文件(Ubuntu 的 wiki 上提供了一个太基础但无法满足您需求的示例这里

至于其余部分,卸载模块可能没有必要(并且并非总是可行的)。如果您确实卸载了模块,我认为它们需要在服务停止后卸载。如果稍后启动的模块依赖于先前启动的模块,您可能还需要反转卸载模块的顺序。根据守护进程从“启动”到“准备好将配置加载到其中”的速度,您可能需要在sleep 1运行之前在那里scstadmin(或者您可能不需要。只是要注意它会失败。)

答案2

查看/etc/init.d/skeleton示例。这应该存在于 Ubuntu 主机上。

相关内容