Нет такого файла или каталога /etc/init.d/functions

21

Я создал скрипт запуска для запуска / перезапуска / остановки группы приложений. Я использовал библиотеку /etc/init.d/functionsв моем сценарии. Это хорошо работает в моей системе, но не работает для моего клиента; он получает ошибку:

Нет такого файла или каталога /etc/init.d/functions

Сейчас я не знаю, какой дистрибутив Linux использует мой клиент. Отличается ли init.d/functionsфайл для разных дистрибутивов Linux? Если так, как я могу найти это?

tecman
источник
Обратите внимание, что эта ошибка также может быть вызвана окончанием строки Windows.
Эмерсон Роча

Ответы:

24

Это зависит от того, какой дистрибутив вы используете. Debian и Ubuntu есть /lib/lsb/init-functions; SuSE имеет /etc/rc.status; ни один из них не совместим с другими. На самом деле, некоторые дистрибутивы вообще не используют /etc/init.dили используют его несовместимым образом (Slackware и Arch встречаются мне на макушке; есть и другие).

geekosaur
источник
Могу ли я узнать, что это за файл и где он находится для Redhat 5.5?
Tecman
Кроме того, как я могу найти эти имя файла и путь? есть ли способ сделать это, или мы можем найти это только из документации?
Tecman
Я сделал это, посмотрев, как у меня есть оба доступных; У меня не установлена ​​Red Hat. Но, возможно, вы упустили важность того, что я сказал жирным шрифтом выше: ваши функции /etc/init.d/functions не существуют в других дистрибутивах. Каждый дистрибутив имеет свои собственные правила /etc/init.d, и его библиотека функций (если таковая имеется) ориентирована вокруг этих правил; например, SuSE rc_status -s. Есть некоторые LSB «стандартные» функции, которые должны быть найдены /lib/lsb/init-functions, но ваш клиент может не использовать дистрибутив, который был обновлен для его предоставления.
geekosaur
15

В образе CentOS 7 Docker мне нужно было просто установить пакет, чтобы установить initscriptsэтот скрипт:

yum install -y initscripts

(Благодаря этой проблеме,docker-library которая заставила меня взглянуть на этот коммит )

Энтони О.
источник
Это исправило мою проблему с использованием Jenkins на Fedora 24 в контейнере Docker. (просто используется dnfвместо yumконечно). Благодарность!
geerlingguy
Это также работает при установке MarkLogic 9 в док-контейнер Centos7. В документации по установке упоминается только о необходимости lib.so.6 и lsb-core-amd64, но я предполагаю, что поскольку они говорят об установке на полную установку CentOS 7, они упустят из виду, что вам понадобится пакет initscripts.
alc6379
12

Это абсолютно зависит от распределения. Вам действительно нужно найти дистрибутив, чтобы написать правильно соответствующий скрипт инициализации.

Вы также можете следовать спецификации LSB (Linux Standard Base) и надеяться, что рассматриваемый дистрибутив сделал то же самое. Текущая спецификация требует, чтобы стандартные функции сценария инициализации были доступны как /lib/lsb/init-functions( см. Здесь документы ). На Fedora и других дистрибутивах, связанных с Red Hat,redhat-lsb пакетом, который является необязательным .

Итак, вам действительно нужно выяснить, на что вы нацелены. Сожалею.

mattdm
источник
1

Добавление недавнего ответа

Как отмечалось в других ответах, спецификации 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.

Samveen
источник
0

Я пропустил эти функции, когда переехал в Ubuntu, поэтому я создал библиотеку, воссоздающую их функциональность: функции .

Маркус Даунинг
источник
0

Я тоже получил ту же ошибку при запуске моего док-контейнера. Это было исправлено добавлением строки ниже в моем Dockerfile

RUN yum install -y initscripts
Thavaprakash Swaminathan
источник