Я пытаюсь написать сценарий инициализации для целевого программного обеспечения 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 переходит к упорядочиванию сценариев инициализации на основе зависимостей вместо последовательной нумерации сценариев. Если вы хотите использовать это, вам понадобятся специальные комментарии в вашем скрипте для insserv
(в update-rc.d
замена) забрать.
В вики Debian есть руководство по написанию «правильного» сценария инициализации. Вот.
Ubuntu ушел с upstart
для замены init, но оставила систему совместимости init, поэтому сценарий инициализации, который вы пишете в соответствии с правилами Debian должен правильно работают в Ubuntu. В противном случае вы можете написать служебный файл выскочки (слишком простой пример для ваших нужд приведен в вики Ubuntu Вот)
В остальном выгрузка модулей, наверное, не нужна (и не всегда возможна). Если вы выгружаете модули, я бы предположил, что их нужно выгрузить после остановки службы. Вам также может потребоваться изменить порядок выгрузки модулей, если модули, запущенные позже, зависят от модулей, запущенных ранее. В зависимости от того, как быстро демон переходит из состояния "запущен" в состояние "готов к загрузке конфигурации", вам может потребоваться sleep 1
там перед бегом scstadmin
(или нет. Просто что-то знать об этом не удается.)