Director de sesión en el aula - GNU/Linux & UNIX

Profesor Alejandro de la Torre

  Secuencia de inicio – Nivel de ejecución - Gestión de servicios - Gestión de procesos.

Documentos


De la puesta en marcha al indicador de Bash
A lo largo del texto incluido en el apartado siguiente están enlazados los documentos de interés.

Puntos de desarrollo

1.- Conceptos

Lenguaje máquina o de bajo nivel.

El lenguaje que entiende el procesador de un sistema informático, con este lenguaje se consigue que el procesador realice una tarea.
Este lenguaje es ininteligible para el ser humano.

Lenguaje de programación o de alto nivel.

El lenguaje que utilizan los programadores (personas) para definir el algoritmo que realiza una tarea en el contexto de un sistema informático (p.e: imprimir el calendario de un año dado).

Ejemplo de lenguajes de programación: C++, Python, Java, COBOL.

Programa fuente.

Archivo de texto que contiene las instrucciones escritas en un lenguaje de programación para realizar una tarea.

Compilar.

La acción de traducir a lenguaje máquina un programa fuente. Dicha acción la ejecuta un programa denominado compilador.

Programa ejecutable.

Archivo creado a partir de la compilación de un programa fuente.
Se entrega directamente al procesador para realizar la tarea que encierra.

Modos de ejecución de un programa ejecutable (clasificación a los efectos de este director).

Aislada: Hace su tarea sin relacionarse con otros programas (p.e. ncal).
Servidor o Servicio: Se mantienen en memoria permamentemente a la espera de que otros programas ejecutables le soliciten la realización de la tarera que tiene encomendada.(p.e. sshd)
Cliente: En este modo de ejecución, el programa solicita a un programa servidor que realice su tarea para él, entregándole el resultado del trabajo si fuera necesario.(p.e. ssh)

Programa interpretado.

Es un programa fuente que no necesita ser compilado para que el procesador realice la tarea que encierra.

Intérprete.

Programa ejecutable que entiende el lenguaje en el que está escrito un programa interpretado, traduce en tiempo real ese lenguaje a lenguaje máquina y hace que el procesador realice la tarea.

Shell script (otros nombres: guión de shell, script).

Programa interpretado escrito en lenguaje de shell, es decir, la conjugación de líneas de ordenes de la shell y estructuras de control que permiten controlar el flujo de dichas órdenes.

Proceso/Trabajo/Job.

Objeto gestionado por el sistema informático, dotado de recursos y atributos y en cuyo seno se ejecutan los programas ejecutables, sólos o en secuencia. Un programa ejecutable no se inserta en memoria principal como tal, debe estar embutido en un proceso.

Atributos de un proceso (los más relevantes).

Niveles de ejecución de un sistema Unix/GNU-Linux. (0 1 2 3 4 5 6).

Dependiendo del runlevel solicitado el sistema se para (0), se reinicia (6) o arranca los servicios asignado a cada nivel (mirar el apartado correspondiente de init):

2.- Secuencia de arranque (detalle de la secuencia con sysvinit / detalle de la secuencia de BSD).

1.- BIOS/UEFI.
2.- GRUB/extlinux/LiLo.
3.- kernel.
4.- init hasta 2010 / systemd a partir de 2010.

init | systemd es el primer programa que se ejecuta. Lleva al sistema al estado de usabilidad que conocemos como ¡usuarios y/o administradores.

3.- init: archivos y directorios relevantes (ejemplos de la sesión con sysresccd).


Directamente vinculados a init.

fichero /etc/inittab

Indirectamente vinculados a init.
4.-init : gestión de servicios (ejemplos durante la sesión con Debian previa instalación del paquete initscripts ).

Utilidades para insertar servicios en un escenario init

5.-systemd:

    Para conocer y entender este nuevo modelo (muy similar al anterior en cuanto a la operatoria) se proporcionan los enlaces de más abajo, como se puede observar, dos de ellos  pertenecen a la documentación de Fedora pero las referencias específicas a esta distribución contenidas en ellos no empañan el caracter genérico de lo que expresan. Se exhorta al alumno a que lea profunda y comprensivamente toda la información que encierran, pero no antes de comprender init y todo lo que le rodea.

Trabajando con Systemd


6.-Un ejemplo de inserción de servicio en ambos escenarios.

Servicio numera. Genera en un fichero de texto de nombre /var/tmp/numera.list 10.000 números aleatorios. A continuación se  presenta el código del servicio, se divide en dos módulos ambos alojados en /usr/sbin.


#!/bin/bash
# Module: 1
# Name: numera
# Invoca en modo background al módulo 2

exec /usr/sbin/numerador&



#!/bin/bash
# Module: 2
# Name: numerador
# Main del servicio numera

for ((i=1;i=10000;i+=1));do
    echo $$ > /var/run/numera.pid;
    echo $RANDOM >> /var/tmp/numera.list;
    sleep 1;
done;
exit;

Escenario init

    numera debe establecerse como servicio en el arranque del sistema en los niveles de ejecución que el comando update-rc.d establezca por defecto y parar en los que por defecto update-rc.d considere. Antes de proceder a la manipulación de los directorios /etc/init.d y /etc/rcN.d los módulos deben estar en su sitio, a saber:  /usr/sbin/numera, /usr/sbin/numerador, /etc/init.d/numera y todos con permisos 755

Escenario systemd

Cómo crear un servicio con Systemd

7.-
Otro modelo. No
init. No systemd. Modelo BSD.

    Lo visto hasta ahora se corresponde con el modelo de puesta en escena de init y gestión de servicios de los sistemas basados en System V, así como el sustituto de todo eso: systemd.

    El modelo correspondiente a los sistemas basados en BSD se explica aquí. Los procesos se gestionan de la misma forma en ambos tipos de sistemas.

8.- Gestión de procesos.

Ámbito del sistema

Monitorización de procesos.

top, ps, lsof, fuser

Interacción (envío de señales).

kill, pkill, killall

Ámbito de la shell (espacio de usuario)

Control de trabajos

jobs, fg, bg, ^Z, ^C, %n, kill

Ámbito de Infraestructura (Monitorización de redes)