Сценарий инициализации должен быть установлен в /etc/init.d (который может быть символической ссылкой на другое место) установщиком пакета.
У нас есть ситуация, когда в результате корпоративной политики и стандартных конфигураций виртуальных машин мы не можем устанавливать сторонние приложения с помощью стандартных установщиков пакетов (yum / rpm) или в места по умолчанию (/ opt и т. Д.). Вместо этого приложения должны быть установлены в раздел, подключенный к NFS (/ apps), что требует remote_fs
. Мы используем еще init.d для управления остановкой / запуском.
Связанный вопрос, не обеспечивающий ясности: Linux /etc/init.d - символическая ссылка, жесткая ссылка или фактический файл?
Есть 2 варианта, оба с проблемами:
/etc/rc.d/init.d/
. Это может быть проблемой, если сторонний разработчик обновляет оболочку (происходит достаточно часто), а мы забываем обновить копию init.d./etc/rc.d/init.d/
в целевой файл (/etc/rc.d/init.d/myapp -> /apps/myapp/bin/wrapper
).Второй вариант представляет проблему, даже если обертка говорит:
### BEGIN INIT INFO
# Required-Start: $local_fs $network $remote_fs $syslog $time
С большой вероятностью требуется remote_fs
еще не был доступен при запуске, поэтому файл, на который указывает символическая ссылка, недоступен для чтения блока INIT INFO, ожидающего remote_fs
и другие услуги от (улов-22). При запуске появляется следующая ошибка (ps: /etc/init.d -> rc.d/init.d
):
systemd-sysv-generator[509]: stat() failed on /etc/rc.d/init.d/myapp: No such file or directory
Я не могу быть первым, кто столкнется с этой проблемой, но не смог найти рекомендации по передовой практике.
Я рассматриваю возможность использования следующего обходного пути; хотел бы знать, есть ли неизвестные последствия, о которых я не знаю. Вместо символьной ссылки создайте "фиктивную" или "сквозную" оболочку в /etc/rc.d/init.d/myapp
.
# chkconfig: 345 75 15
# description: myapp
### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $local_fs $network $remote_fs $syslog $time
# Required-Stop: $local_fs $network $remote_fs $syslog $time
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: App Description
### END INIT INFO
/apps/myapp/bin/wrapper "$@"
Вроде нормально работает с точки зрения остановки / запуска и т. Д. Маловероятно, что изменится (когда-либо?), В отличие от рабочей части оболочки.
Все, что я упустил или не учел?