Я создал скрипт запуска для запуска / перезапуска / остановки группы приложений. Я использовал библиотеку /etc/init.d/functions
в моем сценарии. Это хорошо работает в моей системе, но не работает для моего клиента; он получает ошибку:
Нет такого файла или каталога /etc/init.d/functions
Сейчас я не знаю, какой дистрибутив Linux использует мой клиент. Отличается ли init.d/functions
файл для разных дистрибутивов Linux? Если так, как я могу найти это?
init-script
tecman
источник
источник
Ответы:
Это зависит от того, какой дистрибутив вы используете. Debian и Ubuntu есть
/lib/lsb/init-functions
; SuSE имеет/etc/rc.status
; ни один из них не совместим с другими. На самом деле, некоторые дистрибутивы вообще не используют/etc/init.d
или используют его несовместимым образом (Slackware и Arch встречаются мне на макушке; есть и другие).источник
/etc/init.d/functions
не существуют в других дистрибутивах. Каждый дистрибутив имеет свои собственные правила/etc/init.d
, и его библиотека функций (если таковая имеется) ориентирована вокруг этих правил; например, SuSErc_status -s
. Есть некоторые LSB «стандартные» функции, которые должны быть найдены/lib/lsb/init-functions
, но ваш клиент может не использовать дистрибутив, который был обновлен для его предоставления.В образе CentOS 7 Docker мне нужно было просто установить пакет, чтобы установить
initscripts
этот скрипт:(Благодаря этой проблеме,
docker-library
которая заставила меня взглянуть на этот коммит )источник
dnf
вместоyum
конечно). Благодарность!Это абсолютно зависит от распределения. Вам действительно нужно найти дистрибутив, чтобы написать правильно соответствующий скрипт инициализации.
Вы также можете следовать спецификации LSB (Linux Standard Base) и надеяться, что рассматриваемый дистрибутив сделал то же самое. Текущая спецификация требует, чтобы стандартные функции сценария инициализации были доступны как
/lib/lsb/init-functions
( см. Здесь документы ). На Fedora и других дистрибутивах, связанных с Red Hat,redhat-lsb
пакетом, который является необязательным .Итак, вам действительно нужно выяснить, на что вы нацелены. Сожалею.
источник
Добавление недавнего ответа
Как отмечалось в других ответах, спецификации Linux Standard Base (LSB) предоставляют способ написания
init.d
сценариев запуска, не зависящих от платформы , с использованием функций инициализации, определенных LSB, как указано в списке. здесьВсе LSB совместимые дистрибутивы (все большие) обеспечивают файл
/lib/lsb/init-functions
(который определяет перечисленные функции) в мета-пакет ,lsb-core-noarch
который может быть установлен с помощью менеджера пакетов дистрибутива$PKGMAN $INSTOPT lsb-core-noarch
(yum
,dnf
,apt
...).Примером такого сценария инициализации является это .
Тем не менее, учитывая то, как
systemd
в настоящее время де-факто работает диспетчер систем и сервисов для большинства дистрибутивов, лучше писатьsystemd service unit
вместо написанияinitscript
.источник
Я пропустил эти функции, когда переехал в Ubuntu, поэтому я создал библиотеку, воссоздающую их функциональность: функции .
источник
Я тоже получил ту же ошибку при запуске моего док-контейнера. Это было исправлено добавлением строки ниже в моем Dockerfile
источник