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


21

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

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

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


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

Ответы:


24

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


Могу ли я узнать, что это за файл и где он находится для 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 пакетом, который является необязательным .

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


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.



0

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

RUN yum install -y initscripts
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.