Назад | Перейти на главную страницу

Сценарий инициализации Debian с нуля

Я пытаюсь написать сценарий инициализации для целевого программного обеспечения SCST iSCSI для Debian / Ubuntu. Текущая версия для загрузки не работает и, похоже, предназначена для работы с SuSE и другими.

Это то, что у меня есть до сих пор, но я основываю это на своих ограниченных знаниях скриптов инициализации и большом количестве поисковых запросов в Google.

Мне просто интересно, не слишком ли я думаю об этом, мне нужно выгружать модули каждый раз, когда я останавливаю скрипт. Модули не загружаются при запуске, я знаю, что мне нужно запустить демон 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

В итоге я нашел именно то, что искал, в старом PPA Ubuntu для моей цели iSCSI. Так что этот вопрос в значительной степени спорный.

Проверять, выписываться /etc/init.d/skeleton для примера. Он должен присутствовать на хосте Ubuntu.

Debian Squeeze переходит к упорядочиванию сценариев инициализации на основе зависимостей вместо последовательной нумерации сценариев. Если вы хотите использовать это, вам понадобятся специальные комментарии в вашем скрипте для insservupdate-rc.d замена) забрать.

В вики Debian есть руководство по написанию «правильного» сценария инициализации. Вот.

Ubuntu ушел с upstart для замены init, но оставила систему совместимости init, поэтому сценарий инициализации, который вы пишете в соответствии с правилами Debian должен правильно работают в Ubuntu. В противном случае вы можете написать служебный файл выскочки (слишком простой пример для ваших нужд приведен в вики Ubuntu Вот)

В остальном выгрузка модулей, наверное, не нужна (и не всегда возможна). Если вы выгружаете модули, я бы предположил, что их нужно выгрузить после остановки службы. Вам также может потребоваться изменить порядок выгрузки модулей, если модули, запущенные позже, зависят от модулей, запущенных ранее. В зависимости от того, как быстро демон переходит из состояния "запущен" в состояние "готов к загрузке конфигурации", вам может потребоваться sleep 1 там перед бегом scstadmin (или нет. Просто что-то знать об этом не удается.)