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 stopRelacionado: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