Run-parts
run-parts es un mecanismo originario de Debian ideado para ejecutar scripts en un orden concreto.
Enlaces y referencias
- Ref: run-parts scripts: a note about naming by Juliet Kemp
- Ref: Script Names in Linux Standard Base Specification
- Ref: Debian /etc/cron.d/ gotcha
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:
| |
Expresión regular | --regex=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.