我正在尝试为 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 正在转向基于依赖关系的初始化脚本排序,而不是按顺序对脚本进行编号。如果您要使用这种方式,则需要在脚本中添加特殊注释,以便insserv
(update-rc.d
替换)使用。
Debian 的 wiki 上有一篇关于编写“正确”初始化脚本的指南这里。
Ubuntu 已经用upstart
init 来替代它,但保留了 init 兼容系统,因此你编写的 init 脚本遵循 Debian 的规则应该在 Ubuntu 中正常工作。否则,您可以编写一个 upstart 服务文件(Ubuntu 的 wiki 上提供了一个太基础但无法满足您需求的示例这里)
至于其余部分,卸载模块可能没有必要(并且并非总是可行的)。如果您确实卸载了模块,我认为它们需要在服务停止后卸载。如果稍后启动的模块依赖于先前启动的模块,您可能还需要反转卸载模块的顺序。根据守护进程从“启动”到“准备好将配置加载到其中”的速度,您可能需要在sleep 1
运行之前在那里scstadmin
(或者您可能不需要。只是要注意它会失败。)
答案2
查看/etc/init.d/skeleton
示例。这应该存在于 Ubuntu 主机上。