GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo utiliza Systemd los scripts /etc/init.d?

Acabo de cambiar a Debian jessie, y la mayoría de las cosas funcionan bien, incluido mi administrador de visualización gráfica wdm .

La cosa es que no entiendo cómo funciona esto. Obviamente mi /etc/init.d/wdm se llama script, porque cuando pongo un exit anticipado allí, wdm no se inicia. Pero cuando alternativamente cambio el nombre de /etc/rc3.d directorio (mi nivel de ejecución predeterminado solía ser 3), entonces wdm aún se inicia.

No pude averiguar cómo systemd encuentra este script y no entiendo qué hace con todos los demás scripts init.d.

  • ¿Cuándo y cómo ejecuta systemd scripts init.d?
  • A largo plazo, ¿debería deshacerme de todos los scripts init.d?

Respuesta aceptada:

La respuesta del caos es lo que dice alguna documentación. Pero no es lo que realmente hace systemd. (No es lo que van Smoorenburg rc lo hizo, tampoco. La furgoneta Smoorenburg rc definitivamente no ignorar los encabezados LSB, que insserv se usa para calcular pedidos estáticos, para empezar). La documentación de Freedesktop, como la página de "Incompatibilidades", de hecho es incorrecta, en estos y otros puntos. (El HOME variable de entorno de hecho es a menudo establecido, por ejemplo. Esto quedó totalmente sin documentar en ninguna parte durante mucho tiempo. Ahora está documentado en el manual, al menos, pero esa página WWW de Freedesktop aún no se ha corregido).

El formato de servicio nativo para systemd es la unidad de servicio . La gestión de servicios de systemd propiamente dicha opera únicamente en términos de aquellos, que lee de uno de los nueve directorios donde (en todo el sistema) .service los archivos pueden vivir. /etc/systemd/system , /run/systemd/system , /usr/local/lib/systemd/system y /usr/lib/systemd/system son cuatro de esos directorios.

La compatibilidad con van Smoorenburg rc scripts se logra con un programa de conversión, llamado systemd-sysv-generator . Este programa se encuentra en la lista de /usr/lib/systemd/system-generators/ y, por lo tanto, systemd lo ejecuta automáticamente al principio del proceso de arranque en cada arranque, y nuevamente cada vez que se le 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 hacen funcionar la furgoneta Smoorenburg rc secuencias de comandos de /etc/init.d , si no encuentra una unidad de servicio systemd nativa con ese nombre que ya exista en las otras seis ubicaciones.

La administración de servicios systemd solo conoce las unidades de servicio. Estas unidades de servicio (re)generadas automáticamente están escritas para invocar el rc de van Smoorenburg guiones. Tienen, entre otras cosas:

[Unit]
SourcePath=/etc/init.d/wibble
[Service]
ExecStart=/etc/init.d/wibble start
ExecStop=/etc/init.d/wibble stop

Relacionado:Ubuntu – ¿Cómo ejecutar scripts .sh?

La sabiduría recibida es que el van Smoorenburg rc los scripts deben tener un encabezado LSB y se ejecutan en paralelo sin respetar las prioridades impuestas por /etc/rc?.d/ sistema. Esto es incorrecto en todos los puntos.

De hecho, no necesitan tener un encabezado LSB y, si no lo tienen, systemd-sysv-generator puede reconocer los encabezados de comentarios antiguos de RedHat más limitados (description: , pidfile: , Etcétera). Además, en ausencia de un encabezado LSB, recurrirá al contenido de /etc/rc?.d granjas de enlaces simbólicos, leyendo las prioridades codificadas en los nombres de los enlaces y construyendo un orden antes/después de ellos, serializando los servicios. Los encabezados LSB no solo no son un requisito, y no solo codifican antes/después de los pedidos que serializan las cosas hasta cierto punto, el comportamiento alternativo en su ausencia total es en realidad una operación significativamente no paralela.

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 un Wanted-By nativo relación con multi-user.target de systemd . Los niveles de ejecución están "obsoletos" en el mundo de systemd y puede olvidarse de ellos.

Lecturas adicionales

  • generador systemd-sysv . páginas del manual systemd. Freedesktop.org.
  • “Variables de entorno en procesos generados”. systemd.exec . páginas del manual systemd. Freedesktop.org.
  • https://unix.stackexchange.com/a/394191/5132
  • https://unix.stackexchange.com/a/204075/5132
  • https://unix.stackexchange.com/a/196014/5132
  • https://unix.stackexchange.com/a/332797/5132

Linux
  1. Cómo crear un servicio Systemd en Linux

  2. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  3. ¿Cómo se actualiza /etc/motd?

  4. CentOS / RHEL:cómo recuperarse de un archivo /etc/passwd eliminado

  5. ¿Cómo usar Systemd para reiniciar un servicio cuando está inactivo?

¿Cómo usar if-else en Shell Scripts?

Cómo reiniciar MySQL

Cómo usar @reboot en /etc/cron.d

/etc/passwd muestra al usuario en un grupo, pero /etc/group no

¿Cuál es la conexión entre los directorios /etc/init.d y /etc/rcX.d en Linux?

Cómo configurar /etc/issues para mostrar la dirección IP de eth0