@H_502_1@我正在尝试为Debian / Ubuntu编写SCST iSCSI目标软件的init脚本.下载中的当前版本不起作用,似乎适合在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目标.所以这个问题几乎没有实际意义.
解决方法
Debian Squeeze正在转向基于依赖的init脚本排序,而不是按顺序编写脚本.如果你想使用它,你的脚本中需要特殊注释才能获取insserv(update-rc.d替换).
在Debian的wiki here上有一个编写“正确”的init脚本的指南.
Ubuntu已经用upstart取代了init,但是已经保留了一个init兼容系统,所以你按照Debian规则编写的init脚本应该在Ubuntu中正常工作.否则,您可以编写一个upstart服务文件(在Ubuntu的wiki here上给出了一个基本的 – 用于您需要的示例)
至于其余部分,可能不需要卸载模块(并且不总是可行).如果你卸载模块,我会假设它们需要在服务停止后卸载.如果稍后启动的模块取决于先前启动的模块,您可能还需要反转卸载模块的顺序.根据守护进程从“已启动”到“准备好将配置加载到其中”的速度,您可能需要在运行scstadmin之前进行一次休眠1(或者您可能没有.只是要知道它失败了.)