Итак, у меня есть эти 2 файла:
/etc/init.d
- service1
- service2
service2
выглядит примерно так:
#!/bin/sh
# chkconfig: 2346 95 45
# description: desc
# processname: service2
### BEGIN INIT INFO
# Provides: service2
# Required-Start: service1
# Required-Stop: service1
# Default-Start: 2 3 4 6
# Default-Stop: 0 6
# Short-Description: desc
# Description: long desc
### END INIT INFO
export JAVA_HOME="/opt/java/jre"
export PATH=$JAVA_HOME/bin:$PATH
/opt/do/something.sh $*
Я хочу, чтобы при нормальной загрузке и перезагрузке service2
запускался после ] service1
завершается (около 12 минут, это сервер приложений), но они запускаются почти одновременно, и это нарушает service2
.
Почему сервисная система игнорирует установленные мной зависимости вверх? Здесь что-то не так? Есть ли способ проверить правильность выполнения порядка загрузки?
Я использую RHEL7, и обе службы были успешно добавлены с помощью
chkconfig --add <service_name>
Спасибо
Как Майкл Хэмптон упомянул в комментариях, вам следует преобразовать свои скрипты инициализации старого стиля в модули systemd .
Однако у вас могут быть причины продолжать использовать скрипты SysVinit в старом стиле.
В вашем скрипте может быть одна проблема: я, кажется, припоминаю, что раньше существовало требование , что не должно быть пустые строки перед строкой ### BEGIN INIT INFO
.
Я не могу найти это требование в текущем документе стандартов LSB , но я думаю, что однажды я решил аналогичную проблему, удалив пустые строки перед разделом INIT INFO. Если моя память верна, это могло бы объяснить, почему ваши зависимости не соблюдаются.
Кроме того, зависимости в сценариях SysVinit не обязательно относятся к фактическим службам, а только к самим сценариям: RHEL7 systemd
запустит сценарий service2
сразу после завершения сценария service1
, независимо от того, завершил ли фактический процесс службы, запущенный service1
, свой запуск или не. Итак, если для запуска ваших служб требуется нетривиальное время, сценарии должны явно дождаться полного запуска службы перед завершением работы.