La respuesta del caos es lo que dice cierta documentación. Pero no es lo que hace systemd en realidad. (Tampoco es lo que hizo Van Smoorenburg rc
. La furgoneta Smoorenburgrc
definitivamente no ignoró los encabezados LSB, que insserv
solían calcular los pedidos estáticos, para empezar.) La documentación de Freedesktop, como esa página de "Incompatibilidades", de hecho es incorrecta, en Estos y otros puntos. (La HOME
variable de entorno, de hecho, se establece a menudo, por ejemplo. Esto fue totalmente indocumentado en cualquier lugar durante mucho tiempo. Ahora está documentado en el manual, por lo menos, pero esa página WWW Freedesktop todavía no ha sido corregida.)
El formato de servicio nativo para systemd es la unidad de servicio . La gestión de servicios adecuada de systemd opera únicamente en términos de aquellos, que lee de uno de los nueve directorios donde .service
pueden vivir los archivos (de todo el sistema) . /etc/systemd/system
, /run/systemd/system
, /usr/local/lib/systemd/system
, Y /usr/lib/systemd/system
son cuatro de esos directorios.
La compatibilidad con los rc
scripts de van Smoorenburg se logra con un programa de conversión, llamado systemd-sysv-generator
. Este programa aparece en el /usr/lib/systemd/system-generators/
directorio y, por lo tanto, systemd lo ejecuta automáticamente al principio del proceso de arranque en cada arranque, y nuevamente cada vez que se indica a systemd que vuelva a cargar su configuración más adelante.
Este programa es un generador , un tipo de utilidad auxiliar cuyo trabajo es crear archivos de unidades de servicio sobre la marcha, en un tmpfs donde se encuentran tres más de esos nueve directorios (que están destinados a ser utilizados solo por generadores). systemd-sysv-generator
genera las unidades de servicio que ejecutan los rc
scripts de van Smoorenburg /etc/init.d
, si no encuentra una unidad de servicio systemd nativa con ese nombre ya existente en las otras seis ubicaciones.
La gestión de servicios systemd solo conoce las unidades de servicio. Estas unidades de servicio (re) generadas automáticamente se escriben para invocar los rc
scripts de van Smoorenburg . Tienen, entre otras cosas:
[Unidad]
SourcePath = / etc / init.d / wibble
[Servicio]
ExecStart = / etc / init.d / inicio de wibble
ExecStop = / etc / init.d / wibble stop
La sabiduría recibida es que los rc
scripts de van Smoorenburg deben tener un encabezado LSB y ejecutarse en paralelo sin respetar las prioridades impuestas por el /etc/rc?.d/
sistema. Esto es incorrecto en todos los puntos.
De hecho, no se necesita tener una LSB cabecera, y si lo hacen, no systemd-sysv-generator
pueden reconocer las cabeceras más limitadas viejos comentario RedHat ( description:
, pidfile:
y así sucesivamente). Además, en ausencia de un encabezado LSB, recurrirá al contenido de las /etc/rc?.d
granjas de enlaces simbólicos, leerá las prioridades codificadas en los nombres de los enlaces y construirá un pedido antes / después de ellos, serializando los servicios. No solo los encabezados LSB no son un requisito, y no solo codifican ellos mismos antes / después de los pedidos que serializan las cosas hasta cierto punto, sino que el comportamiento alternativo en su ausencia total es una operación significativamente no paralelizada.
La razón por la que /etc/rc3.d
no parecía importar es que probablemente tenía ese script habilitado a través de otro /etc/rc?.d/
directorio. systemd-sysv-generator
traduce estar listado en cualquiera de /etc/rc2.d/
, /etc/rc3.d/
y /etc/rc4.d/
en una Wanted-By
relación nativa con systemd's multi-user.target
. Los niveles de ejecución son "obsoletos" en el mundo systemd, y puede olvidarse de ellos.
Otras lecturas
systemd
y un script /etc/init.d no está configurado para "arrancar al inicio", seguirá funcionando como se esperaba pero no aparecerá en el show-unidades listas: unix.stackexchange.com/a/518894/8337Systemd es compatible con las secuencias de comandos de inicio de SysV. De acuerdo con LSB 3.1, el guión de inicio debe tener Convenciones de comentarios informativos , que definan cuándo el guión debe iniciarse / detenerse y qué se requiere para que el guión se inicie / detenga. Esto es un ejemplo:
Esta es una sección comentada que SysV ignora. Por otro lado, systemd lee esa información de dependencia y ejecuta esos scripts dependiendo de eso.
Pero hay un punto, donde systemd y SysV difieren en términos de scripts de inicio. SysV ejecuta los scripts en orden secuencial en función de su número en el nombre del archivo. Systemd no lo hace. Si se cumplen las dependencias, systemd ejecuta los scripts de inmediato, sin respetar la numeración de los nombres de los scripts. Algunos de ellos probablemente fallarán debido al pedido. Hay muchas otras incompatibilidades que deben considerarse.
Si hay scripts de inicio y archivos .service para el mismo servicio, systemd ejecutará ambos, tan pronto como se cumplan las dependencias (en el caso del script de inicio, los definidos en el encabezado LSB).
fuente