加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Debian init脚本从头开始

发布时间:2020-12-13 16:45:08 所属栏目:Linux 来源:网络整理
导读:我正在尝试为Debian / Ubuntu编写SCST iSCSI目标软件的init脚本.下载中的当前版本不起作用,似乎适合在SuSE和其他人上工作. 这是我到目前为止所做的,但我的基础是我对初始脚本和大量谷歌搜索的有限知识. 我只是想知道我是否在考虑这个问题,每次停止脚本时我是
我正在尝试为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(或者您可能没有.只是要知道它失败了.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读