Автор Тема: Не запускается служба при перезагрузке  (Прочитано 20027 раз)

Оффлайн grigoryB

  • Давно тут
  • **
  • Сообщений: 37
Нужно чтобы сценарий срабатывал при загрузке и при перезагрузке (или выключении) системы
Создал тестовую службу вида

#!/bin/sh

### BEGIN INIT INFO
# Provides: test
# Required-Start:       $all
# Required-Stop:        $all
# Default-Start:        3 4 5
# Default-Stop:         0 1 2 6
# Short-Description:    Test service
# Description:          Test service
### END INIT INFO

case $1 in
start)
echo "$1" >>/home/user/temp/log.log
;;
stop)
echo "$1" >>/home/user/temp/log.log
;;
restart)
echo "$1" >>/home/user/temp/log.log
;;
*)
echo "$1" >>/home/user/temp/log.log
esac

exit 0;

Затем выполнил

chkconfig --add test

в результате появились ссылки в каталогах

/etc/rc.d/rc0.d/50Ktest
/etc/rc.d/rc1.d/50Ktest
/etc/rc.d/rc2.d/50Ktest
/etc/rc.d/rc6.d/50Ktest

/etc/rc.d/rc3.d/50Stest
/etc/rc.d/rc4.d/50Stest
/etc/rc.d/rc5.d/50Stest

Проблема в том, что скрипт отрабатывает нормально при запуске системы с параметром start, а вот при перезагрузке или выключении вообще не вызывается. В чем может быть дело?

Оффлайн klark973

  • Давно тут
  • **
  • Сообщений: 624
  • Неспящий саппорт
В чем может быть дело?

Наверное, в этом:

# Required-Start:       $all
# Required-Stop:        $all
To moan or to solve -- that is the question!

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
Проблема в том, что скрипт отрабатывает нормально при запуске системы с параметром start, а вот при перезагрузке или выключении вообще не вызывается. В чем может быть дело?

В lock-файлах, которые в сизифе альты сломали на sysv к херам.
Читать тут ближе к концу:
https://forum.altlinux.org/index.php?topic=32361.msg253079#msg253079

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
Также например:
# grep -i lock /etc/rc.d/init.d/netfs
LOCKFILE=/var/lock/subsys/netfs
touch "$LOCKFILE"
rm -f "$LOCKFILE"
^^^^^^^
Действия с lock-файлом в конце функций start|stop.
« Последнее редактирование: 05.11.2018 23:22:53 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
LSB-хидер вам нужен чтобы толкнуть инит-скрипт в системе с сыстемдецом, но этого недостаточно в системе с sysv без сыстемдеца.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 403
  • Sunny 273 RUS crew
LSB-хидер вам нужен чтобы толкнуть инит-скрипт в системе с сыстемдецом, но этого недостаточно в системе с sysv без сыстемдеца.
С одной стороны да, но, с другой, на него кто-то ещё обучен реагировать. Вероятно, chkconfig. И если там написано "Default-Start: 3 4 5", то оно сразу так и будет. Собственно, написано же:
/etc/rc.d/rc3.d/50Stest
/etc/rc.d/rc4.d/50Stest
/etc/rc.d/rc5.d/50Stest
Значит всё должно быть, если sysvinit.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 403
  • Sunny 273 RUS crew
Проблема в том, что скрипт отрабатывает нормально при запуске системы с параметром start, а вот при перезагрузке или выключении вообще не вызывается. В чем может быть дело?

В lock-файлах, которые в сизифе альты сломали на sysv к херам.
Читать тут ближе к концу:
https://forum.altlinux.org/index.php?topic=32361.msg253079#msg253079
У меня всё работает.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
Проблема в том, что скрипт отрабатывает нормально при запуске системы с параметром start, а вот при перезагрузке или выключении вообще не вызывается. В чем может быть дело?

В lock-файлах, которые в сизифе альты сломали на sysv к херам.
Читать тут ближе к концу:
https://forum.altlinux.org/index.php?topic=32361.msg253079#msg253079
У меня всё работает.

Я УМВР не перевариваю совсем. Ссылки дать?

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
https://access.redhat.com/solutions/1383853
Цитировать
Root Cause

    systemd honors the LSB headers in init scripts. It will convert $network to the systemd option After=network-online.target

LSB-хидер не задаёт жёсткую очерёдность сервисов, когда порядок start|stop важен.


Цитировать
Такие инструменты, как /sbin/chkconfig, могут возвращать вводящую в заблуждение информацию при использовании для отображения статуса активации служб.
Лёня, ты дурак?
Лёнька Поттеринг, специально для тебя:
chkconfig никогда не умел возвращать статус сервиса и никогда не запрещал запуск сервиса руками.
« Последнее редактирование: 06.11.2018 11:03:07 от Speccyfighter »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 403
  • Sunny 273 RUS crew
LSB-хидер не задаёт жёсткую очерёдность сервисов, когда порядок start|stop важен.
Вообще-то задаёт в некотором виде (Required-Start, Should-Start). Но в случае sysvinit и chkconfig этот порядок берётся из "chkconfig:" в начале скрипта.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 403
  • Sunny 273 RUS crew
Я УМВР не перевариваю совсем.
А я - безапиляционные заявления.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
LSB-хидер не задаёт жёсткую очерёдность сервисов, когда порядок start|stop важен.
Вообще-то задаёт в некотором виде (Required-Start, Should-Start). Но в случае sysvinit и chkconfig этот порядок берётся из "chkconfig:" в начале скрипта.

Ага :-) щас:
# grep '# chkconfig\|Default-St' /etc/rc.d/init.d/nm-group
# chkconfig: 5 10 92
# Default-Start:  4 5
# Default-Stop:
# ls -lR /etc/rc*.d/*nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc0.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc1.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc2.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc3.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc4.d/S10nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc5.d/S10nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:48 /etc/rc6.d/K92nm-group -> ../init.d/nm-group

# grep '# chkconfig\|Default-St' /etc/rc.d/init.d/nm-group
# chkconfig: 345 10 92
# Default-Start:   5
# Default-Stop:
# ls -lR /etc/rc*.d/*nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc0.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc1.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc2.d/K92nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc3.d/S10nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc4.d/S10nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc5.d/S10nm-group -> ../init.d/nm-group
lrwxrwxrwx 1 root root 18 ноя  6 11:53 /etc/rc6.d/K92nm-group -> ../init.d/nm-group

Он берёт там, где больше чисел уровней перечислено.
« Последнее редактирование: 06.11.2018 11:55:16 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
Кстати в osspd есть бага:
Приложение запущенное непривилегированным пользователем и требующее устройства /dev/dsp способно самостоятельно запустить сервис без вмешательства root:
# ls -lR /etc/rc*.d/*osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc0.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc1.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc2.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc3.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc4.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc5.d/K10osspd -> ../init.d/osspd
lrwxrwxrwx 1 root root 15 сен  7 10:50 /etc/rc6.d/K10osspd -> ../init.d/osspd
# service osspd status
osspd is stopped
# find /var/lock -name "*oss*"
#

Запуск приложения требующего /dev/dsp

# service osspd status
osspd is running
# find /var/lock -name "*oss*"
/var/lock/subsys/osspd

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 403
  • Sunny 273 RUS crew
LSB-хидер не задаёт жёсткую очерёдность сервисов, когда порядок start|stop важен.
Вообще-то задаёт в некотором виде (Required-Start, Should-Start). Но в случае sysvinit и chkconfig этот порядок берётся из "chkconfig:" в начале скрипта.
Ага :-) щас:
Вот зачем сейчас вся эта портянка была нужна? Я написал, что LSB init header задаёт порядок старта. Он - задаёт. Но я нигде не написал, что это может использовать sysvinit.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 585
Вот зачем сейчас вся эта портянка была нужна?

Затем что ты написал:
Но в случае sysvinit и chkconfig этот порядок берётся из "chkconfig:" в начале скрипта.

Если скрипт содержит и LSB, уровни будут браться не из chkconfig, а оттуда где их перечислено больше. Смотри эту портянку.