Continuando con estos temas de systemd (ahora que el tiempo ha dado tregua :P) vamos a la siguiente parte.
Niveles de ejecucion/targets
Los runlevel o nuveles de ejecucion en sistemas tipo Unix SystemV se refiere a el modo de operacion del sistema, generalmente son 7 distintos niveles de ejecucion, aunque algunos sistemas varian de 7 a 10 niveles distintos de ejecucion.
En ArchLinux hay 7 niveles de ejecucion en los initscripts
Nivel | Descripcion |
---|---|
0 | Halt/Apagar |
1 | Mono-usuario (modo de mantenimiento) |
2 | No usado |
3 | Multi-Ususario |
4 | No usado |
5 | Multi-Usuario con X11 |
6 | Reinicio |
Distintos niveles de ejecucion son llamados durante el inicio del sistema o durante el apagado/reinicio, esto claro con initcripts, systemd hace las cosas un poco diferente.
Systemd tiene un concepto de objetivos o targets que tienen el mismo objetivo que los niveles de ejecucion, pero funcionan diferente:
- Cada objetivo tiene un nombre en vez de un numero y cada uno tiene un objetivo en especifico.
- Algunos objetivos heredan todos los procesos del objetivo anterior y añade servicios a ellos.
- Hay objetivos diseñados especificamente para imitar el comportamiento de los niveles de ejecucion de sysvinit y pueden ser llamados con el clasico comando init
Antes ya habia escrito sobre estos niveles de ejecucion y los targets, me permito copiar esta tabla de equivalencias:
Nivel de ejecucion SystemV |
Objetivo de Systemd |
Notas |
0 | runlevel0.target, poweroff.target | Apaga el sistema |
1, mono usuario | runlevel1.target, rescue.target | Modo mono-usuario |
2, 4 | runlevel2.target, runlevel4.target, multi-user.target | Modo de inicio definido por el usuario/sistema, por default identico a 3 |
3 | runlevel3.target, multi-user.target | Multiusuario, entorno grafico |
5 | runlevel5.target, graphical.target | Multiusuario, entorno grafico, todos los servicios del nivel 3 mas un entorno grafico |
6 | runlevel6.target, reboot.target | reinicio |
emergency | emergency.target | Shell de emergencia |
Y que target estoy ejecutando?
Como systemd tiene una capa de compatibilidad con los niveles de ejecucion se puede saber el nivel de ejecucion con el comando runlevel
pero en systemd, pueden estar en ejecucion multiples objetivos, por lo cual se recomienda:
systemctl list-units --type=target
Esto nos dara los objetivos (o targets) en actual ejecucion
Si queremos ver los targets disponibles qeu tenemos:
systemctl list-units --type=target --all
Y como utilizo estos targets?
Algunos ejemplos:
Activar multi usuario con interfaz grafica:
systemctl isolate runlevel5.target
O nivel monousuairo o modo de rescate (runlevel 1)
systemctl isolate runlevel1.target
pasar parametros temporales al grub
Antes en el grub se podian pasar parametros de inicio temporales, al final de la linea de inicio del kernel en el grub se podia poner el nivel de ejecucion del sistema solo poniendo el numero del nivel de ejecucion:
Poniendo un parametro de inicio de nivel monousuario de manera temporal:
kernel /vmlinuz-linux root=/dev/disk/by-uuid/d531ff5b-de65-499a-9942-d18682375163 ro quiet 3
Ahora con Systemd son un monton de parametros los que se pueden controlar:
systemd.unit=
Sobre escribe de manera temproal en que target iniciara, es usado para inicar de manera temproal en otro nivel de ejecucion, como nivel mono usuario: systemd.unit=rescue.targeto emergencia: systemd.unit=emergency.target, el default es default.target
systemd.dump_core=
Toma un argumento booleano. Si es cierto tirara lo registros cuando truene. De otra forma ningun registro es creado (ideal para averiguar que genera un kernel panic)
systemd.crash_shell=
Toma un aargumento booleano. Si es cierto systemd iniciara una shell cuando truene. De otra forma no hara nada, el default es no hacer nada, por razones de seguridad esta desactivado ya que la shell a donde llega esta desprotegida de password
systemd.crash_chvt=
Toma un argumento entero. Si es positivo systemd activara la terminal virtual especificada (el default es -1)
systemd.confirm_spawn=
Toma un argumento booleano. Si es verdadero, systemd pedira configmacion para iniciar procesos (default es falso)
systemd.show_status=
Toma un argumento booleano. Si es verdadero systemd envia mensajes de estatus a la consola durante el inicio (default en verdadero)
systemd.sysv_console=
Toma un argumento booleano. Si es verdadero, la salida de los sscripts de sysvinit seran mostrados en cosola. El default es verdadero, a menos que el parametro quiet sea pasado como argumento de inicio
systemd.log_target=
Establece el objetivo del registro. el argumento debe ser uno de estos: console, syslog, kmsg, syslog-or-kmsg, null.
systemd.log_level=
Establece un nivel de registro. Como argumento acepta un numero o los conocidos nombres de syslog: emerg, alert, crit, err, warning, notice, info, debug.
systemd.log_color=
Subraya importantes mensajes de registro. El argumetno es booleano. Su default es verdadero
systemd.log_location=
Especifica la ruta a donde guardar los registros, esto es importante para debigging.
Cualquiera de estos valores pueden ser introducidos temporalmente a la linea de inicio del grub para distintos fines.
Listo. para mañana los units y los daemons cara a cara, Saludos!
Para leer:
Wikipedia Niveles de ejecucion
Fedora sysvinit to systemd cheatsheet
Pingback: Migrando a systemd en ArchLinux | Gespadas()
Pingback: Game of thrones | Definamos Normal.()