Creé un script de inicio para iniciar / reiniciar / detener un grupo de aplicaciones. Usé la lib /etc/init.d/functions
en 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/functions
archivo es diferente para diferentes distribuciones de Linux? Si es así, ¿cómo puedo encontrarlo?
init-script
tecman
fuente
fuente
Respuestas:
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.d
en absoluto, o se usan de una manera incompatible (Slackware y Arch se me ocurren fuera de la cabeza; hay otros).fuente
/etc/init.d/functions
no existen en otras distribuciones. Cada distribución tiene sus propias reglas/etc/init.d
y su biblioteca de funciones (si la hay) está orientada en torno a esas reglas; por ejemplo, SuSErc_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.En la imagen de CentOS 7 Docker, simplemente tuve que instalar el paquete
initscripts
para poder instalar este script:(Gracias a este tema en el
docker-library
que me hizo ver este commit )fuente
dnf
lugar de,yum
por supuesto). ¡Gracias!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 elredhat-lsb
paquete, que es opcional .Por lo tanto, realmente tiene que descubrir a qué se dirige. Lo siento.
fuente
Agregar una respuesta reciente
Como se señaló en otras respuestas, las especificaciones de Linux Standard Base (LSB) proporcionan una forma de escribir
init.d
scripts 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-paquetelsb-core-noarch
que 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
systemd
ahora es el administrador de servicio y sistema de facto para la mayoría de las distribuciones, es mejor escribir un ensystemd service unit
lugar de escribir uninitscript
.fuente
Eché de menos esas funciones cuando me mudé a Ubuntu, así que creé una biblioteca que recrea su funcionalidad: las funciones .
fuente
Yo también recibí el mismo error mientras ejecuto mi contenedor docker. Se solucionó agregando la siguiente línea en mi Dockerfile
fuente