从头开始的 Debian init 脚本

ian*_*215 5 linux ubuntu debian init.d

我正在尝试为 Debian / Ubuntu 的 SCST iSCSI 目标软件编写一个初始化脚本。下载中的当前版本不起作用,似乎可以在 SuSE 和其他设备上运行。

这是我到目前为止所拥有的,但我基于我对 init 脚本和大量谷歌搜索的有限知识。

我只是想知道我是否想多了,每次停止脚本时是否都需要卸载模块。启动时没有加载的模块,我知道我需要启动 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
Run Code Online (Sandbox Code Playgroud)

实际上,我最终在旧的 Ubuntu PPA 中为我的 iSCSI 目标找到了我正在寻找的东西。所以这个问题几乎没有实际意义。

top*_*gon 5

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


Der*_*rfK 4

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

Debian 的 wiki 上有一个编写“正确的”初始化脚本的指南。

Ubuntu 已经取代了upstartinit,但保留了 init 兼容系统,因此您按照 Debian 规则编写的 init 脚本应该可以在 Ubuntu 中正常工作。否则,您可以编写一个新贵服务文件(Ubuntu 的 wiki上给出了一个太基本的适合您需求的示例)

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