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


21

Я створив сценарій запуску, щоб запустити / перезапустити / зупинити групу програм. Я використовував lib /etc/init.d/functionsу своєму сценарії. Він добре працює в моїй системі, але не працює для мого клієнта; він отримує помилку:

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

Зараз я не знаю, який дистрибутив Linux використовує мій клієнт. Чи init.d/functionsвідрізняється файл для різних дистрибутивів Linux? Якщо так, то як я можу його знайти?


Зауважте, що ця помилка також може бути викликана закінченнями рядків Windows.
Emerson Rocha

Відповіді:


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

Це абсолютно залежить від розподілу. Вам дійсно знадобиться дізнатися дистрибутив, щоб написати правильно відповідний сценарій init.

Ви також можете дотримуватися специфікації LSB (Linux Standard Base) і сподіватися, що і розглянутий дистрибутив. Поточна специфікація диктує, що стандартні функції скрипта init будуть доступні як /lib/lsb/init-functions( див. Документи тут ). У Fedora та інших дистрибутивах, пов'язаних з Red Hat, це передбачено redhat-lsbпакетом, який не є обов'язковим .

Отже, ви дійсно повинні з'ясувати, на що ви орієнтуєтесь. Вибачте.


1

Додавання нещодавньої відповіді

Як зазначається в інших відповідях, специфікації стандартної бази Linux (LSB) надають спосіб писати init.dсценарії запуску незалежно від платформи , використовуючи визначені LSB функції init, перелічені тут

Все LSB сумісні дистрибутиви (всі великі) забезпечують файл /lib/lsb/init-functions(який визначає перераховані функції) в мета-пакет , lsb-core-noarchякий може бути встановлений з допомогою менеджера пакетів дистрибутива $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt...).

Приклад такого сценарію init - це .

Однак, враховуючи те, як systemdзараз де-факто система та менеджер сервісних послуг для більшості дистрибутивів, краще написати а systemd service unitне виписувати initscript.



0

Я теж отримав таку ж помилку, коли запускаю контейнер докера. Це було виправлено додаванням нижче рядка в моєму Dockerfile

RUN yum install -y initscripts
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.