No existe tal archivo o directorio /etc/init.d/functions

21

Creé un script de inicio para iniciar / reiniciar / detener un grupo de aplicaciones. Usé la lib /etc/init.d/functionsen mi script. Funciona bien en mi sistema, pero no funciona para mi cliente; él está recibiendo el error:

No existe tal archivo o directorio /etc/init.d/functions

En este momento no sé qué distribución de Linux usa mi cliente. ¿El init.d/functionsarchivo es diferente para diferentes distribuciones de Linux? Si es así, ¿cómo puedo encontrarlo?

tecman
fuente
Tenga en cuenta que este error también puede ser causado por las terminaciones de línea de Windows.
Emerson Rocha

Respuestas:

24

Es específico para cualquier distribución que esté ejecutando. Debian y Ubuntu tienen /lib/lsb/init-functions; SuSE tiene /etc/rc.status; ninguno de ellos es compatible con los demás. De hecho, algunas distribuciones no se usan /etc/init.den absoluto, o se usan de una manera incompatible (Slackware y Arch se me ocurren fuera de la cabeza; hay otros).

geekosaur
fuente
¿Puedo saber cuál es el archivo y dónde está ubicado para Redhat 5.5?
tecman
Además, ¿cómo puedo encontrar el nombre de archivo y la ruta? ¿Hay alguna forma de hacerlo o es que solo podemos encontrarlo en la documentación?
tecman
Lo hice mirando, ya que tengo ambos disponibles; No tengo una instalación de Red Hat. Pero es posible que haya perdido la importancia de lo que dije en negrita arriba: las funciones en su /etc/init.d/functions no existen en otras distribuciones. Cada distribución tiene sus propias reglas /etc/init.dy su biblioteca de funciones (si la hay) está orientada en torno a esas reglas; por ejemplo, SuSE rc_status -s. Hay algunas funciones "estándar" de LSB, que se supone se encuentran en /lib/lsb/init-functions, pero su cliente puede no estar ejecutando una distribución que se ha actualizado para proporcionarla.
geekosaur
15

En la imagen de CentOS 7 Docker, simplemente tuve que instalar el paquete initscriptspara poder instalar este script:

yum install -y initscripts

(Gracias a este tema en eldocker-library que me hizo ver este commit )

Anthony O.
fuente
Esto solucionó mi problema al usar Jenkins en Fedora 24 en un contenedor Docker. (solo se usa en dnflugar de, yumpor supuesto). ¡Gracias!
geerlingguy
Esto también funciona al instalar MarkLogic 9 en un contenedor acoplable Centos7. Los documentos de instalación solo mencionan la necesidad de lib.so.6 y lsb-core-amd64, pero supongo que dado que están hablando de instalar en una instalación completa de CentOS 7, pasarían por alto que necesitaría el paquete initscripts.
alc6379
12

Eso es absolutamente dependiente de la distribución. Realmente necesitará encontrar la distribución para escribir un script de inicio que coincida correctamente.

También puede seguir la especificación LSB (Linux Standard Base) y esperar que la distribución en cuestión también lo haya hecho. La especificación actual dicta que las funciones de script de inicio estándar estén disponibles como /lib/lsb/init-functions( ver documentos aquí ). En Fedora y otras distribuciones relacionadas con Red Hat, eso es proporcionado por el redhat-lsbpaquete, que es opcional .

Por lo tanto, realmente tiene que descubrir a qué se dirige. Lo siento.

mattdm
fuente
1

Agregar una respuesta reciente

Como se señaló en otras respuestas, las especificaciones de Linux Standard Base (LSB) proporcionan una forma de escribir init.dscripts de inicio basados ​​en plataformas independientes , utilizando las funciones de inicio definidas por LSB que se enumeran aquí

Todas las distribuciones compatibles con LSB (todos los grandes) proporcionan el archivo /lib/lsb/init-functions(que define las funciones enumeradas) en el meta-paquete lsb-core-noarchque se puede instalar usando el gestor de paquetes de la distribución $PKGMAN $INSTOPT lsb-core-noarch( yum, dnf, apt, ...).

Un ejemplo de tal script de inicio es este .

Sin embargo, dado que systemdahora es el administrador de servicio y sistema de facto para la mayoría de las distribuciones, es mejor escribir un en systemd service unitlugar de escribir un initscript.

Samveen
fuente
0

Eché de menos esas funciones cuando me mudé a Ubuntu, así que creé una biblioteca que recrea su funcionalidad: las funciones .

Marcus Downing
fuente
0

Yo también recibí el mismo error mientras ejecuto mi contenedor docker. Se solucionó agregando la siguiente línea en mi Dockerfile

RUN yum install -y initscripts
Thavaprakash Swaminathan
fuente