Run-parts

De Astillas.net

run-parts es un mecanismo originario de Debian ideado para ejecutar scripts en un orden concreto.

Enlaces y referencias

Funcionamiento

El ejecutable /usr/bin/run-parts está incluído en el paquete debianutils y su funcionamiento es muy simple: basta con indicarle el directorio donde encontrará los programas que debe ejecutar nombrados de una forma especial. Ignorará cualquier subdirectorio y cualquier archivo que no cumpla con sus requisitos, bien por nombre, bien por permisos de ejecución desactivados.

$ run-parts --report /etc/empresa/setup/

Existen tres nomenclaturas que pueden emplearse con el programa y cada una de ellas se selecciona mediante un parámetro concreto.

Algo que parece ser común a todas ellas -y que sólo he visto en el artículo de Juliet Kemp citado arriba- es que los nombres de archivos no pueden llevar extensión alguna.

El manual de Debian indica que algunas extensiones están prohibidas, y es cierto, pero omite que cualquier extensión es causa suficiente para ignorar el script.

La siguiente tabla intenta resumirlas:

Nomenclatura Parámetro Restricciones en nombres
Tradicional

Pueden estar compuestos sólo por:

  • Letras en mayúscula y minúscula
  • Números
  • Subrayados (_)
  • Guiones (-)
Expresión regular --regex=RE
  • Deben coincidir con la expresión regular RE.
LSB --lsbsysinit

Espacios de nombres

El programa run-parts emplea los siguientes espacios de nombres para los ejecutables cuando se llama con el parámetro --lsbsysinit.

Asignado por LANANA (Linux Assigned Names and Numbers Authority)
Sólo puede emplear el rango ASCII a-z (en minúscula) y dígitos 0-9
^[a-z0-9]+$
LSB (Linux Standard Base) jerárquico y reservado
Donde las jerarquías se definen como prefijos separados por guiones y aparece el nombre al final. Cada jerarquía es un nombre asignado por LANANA o un nombre DNS con un punto incorporado. Si además es un nombre reservado debe llevar un subrayado como primer carácter
^_?([a-z0-9_.]+-)[a-z0-9]+$
El usado por el subsistema cron de Debian
que consiste en letras en maýuscula o minúscula, dígitos numéricos, subrayados y guiones
^[a-zA-Z0-9_-]+$

Depurando

El programa run-parts permite observar cuál va a ser su funcionamiento mediante algunos parámetros:

--test
Muestra los nombres de los scripts que serían ejecutados pero sin llegar a invocarlos realmente.
--list
Similar a --test pero incluye también aquellos archivos no ejecutables.

Así pues, la diferencia entre invocar a run-parts en un directorio como /etc/init.d con el parámetro test en lugar de list, es que con el último aparecen dos archivos más:

0a1
> /etc/init.d/.legacy-bootordering
87a89
> /etc/init.d/skeleton

el primero es un archivo bandera para indicar que aún no hemos pasado al nuevo orden de arranque del sistema (basado en LSB) y el segundo es el acostumbrado esqueleto para crear nuevos programas de este tipo.

Parámetros

Existen otros parámetros que pueden ser útiles:

--reverse
Emplear el orden inverso al normal (orden alfabético por nombre) para ejecutar los programas.
--exit-on-error
Finalizar con error en cuanto el primero de los programas lo haga a su vez.
--new-session
Ejecutar cada programa en una sesión de proceso nueva de manera que si se mata al proceso run-parts la tarea comenzada continúe hasta su finalización y no muera con el proceso padre.
--umask=umask
Define la máscara de creación de archivos antes de ejecutar los programas. Debe indicarse en octal y su valor predeterminado es 022.
--arg=argumento
Añade argumento como parámetro a cada programa que invoca. No he encontrado más documentación sobre si lo complejo que puede ser, por lo que asumo que debe ser un único texto.