Немає такого файлу чи каталогу /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.