Scripts de arranque.

Anuncio
Scripts de arranque.
Pablo Sanz Mercado.
1
1.
Configuración y comandos básicos.
Los niveles de ejecución en Linux son las diferentes formas en las que podemos
encontrar un sistema operativo Linux.
Cuando arrancamos un sistema Linux, tenemos la posibilidad de que el sistema
operativo se comporte por ejemplo de forma monousuario, es decir, que no tengamos que introducir ni siquiera la contraseña del super usuario ya que arranca
directamente en esta cuenta, como pasaba con los sistemas opertivos DOS o Windows95/98/me. Otra forma que podemos tener de arrancar Linux es que permita
que múltiples usuarios puedan conectarse a nuestra máquina, y que arranque un
entorno gráfico en el cual pueda trabajar de forma muy agradable la persona que
se siente delante de este equipo.
Niveles de ejecución tenemos varios, es más, podremos incluso crear nuestro propio nivel de ejecución, totalmente personalizado. Por tanto esta forma de trabajar
aumenta la versatilidad que tiene el sistema operativo Linux.
Al ser los niveles de ejecución totalmente configurables, es posible que al trabajar
en diferentes versiones de Linux veamos diferencias significativas.
En la mayorı́a de las distribuciones de Linux vamos a tener que el nivel de ejecución 0 es el de apagado, es decir, si vemos que nuestro equipo está en este nivel de
ejecución, inmediatamente tendremos que darnos cuenta de que está produciéndose el apagado del mismo. Otro nivel de ejecución que suele ser el mismo en todas
las distribuciones es el número 6, que es el nivel de ejecución de reinicio, es decir,
cuando nuestra máquina pasa a estado de ejecución 6 realmente está reiniciándose.
Llegados a este punto nos damos perfecta cuenta de que un nivel de ejecución no
es una forma de arrancar el sistema operativo, sino un estado del mismo. En muchas
distribuciones el nivel de ejecución número 5 es el nivel de ejecución multiusuario
con entorno gráfico y es el que se ejecuta por defecto cuando arranca el equipo.
No tenemos que querdarnos entonces en que el nivel de ejecución de nuestro equipo
es el número 5, sino que en ese justo momento está en el nivel de ejecución 5 y
podremos cambiar a otro nivel en el momento que deseemos.
También es habitual que en las diferentes distribuciones Linux el nivel de ejecución número 3 sea el de multiusuario sin entorno gráfico. Si bien es posible que
en algún sistema Linux este nivel de ejecución no sea el número 3, normalmente
nos encontraremos este nivel de ejecución ya que es muy habitual que las máquinas
permanezcan la mayorı́a del tiempo en él. Esto suele ocurrir en máquinas destinadas
al cálculo, donde es superfluo un entorno gráfico ya que suelen ser administradas
en remoto y el tener este entorno aumenta la necesidad en disco pero sobre todo la
cantidad de memoria RAM necesaria para las operaciones habituales.
Ya que habı́amos hablado del nivel de ejecución monousuario, comentar que
en la mayorı́a de las distribuciones suele ser el número 1, es decir, estar en nivel
de ejecución número 1 implica necesariamente la imposibilidad de poder conectarnos a esta máquina con más de un usuario, y además este (root) debe conectarse
directamente en consola.
El nivel de ejecución número 2 es multiusuario sin entorno gráfico y sin NFS
2
en muchas distribuciones de Linux, es decir, es como el nivel de ejecución número
3 pero sin la posibilidad de importar/exportar recursos de disco a través de la red.
Este nivel de ejecución se suele utilizar si tenemos algún problema con la red, si bien
queremos mantener la caracterı́stica de entorno multiusuario en nuestro equipo.
Finalmente comentar que el nivel de de ejecución número 4 suele estar reservado para que el administrador del equipo lo adapte a sus propias necesidades,
siendo por tanto este nivel de ejecución el personal del administrador, teniendo las
caracterı́sticas que este haya querido introducir.
Cuando hablamos de nivel de ejecución es posible que lo veamos como un ente
extraño y totalmente lejano a nuestras necesidades y posibilidades. Nada más lejano
de la realidad.
Cuando accedemos a un nivel de ejecución, realmente lo que ocurre es que se
ejecutan los scripts contenidos en el directorio rcX.d, donde X es un número que
indica el nivel de ejecución al que nos referimos (rc5.d por ejemplo a multiusuario
con entorno gráfico).
Los directorios rcX.d habitualmente los encontramos directamente en el directorio /etc, si bien en ciertas distribuciones los encontraremos en /etc/init.d, y si
comprobamos su contenido nos daremos cuenta de que contienen varios (en muchas ocasiones una gran cantidad) enlaces simbólicos con nombres que siguen una
estructura muy caracterı́stica:
El primer carácter que nos encontramos es o una K o una S. A continuación tenemos dos caracteres que son números y finalmente tenemos un nombre sin ninguna
regla preestablecida, pero que suele ser exactamente igual al nombre del fichero que
apunta el enlace simbólico, por ejemplo:
K05network
Los ficheros a los que apuntan, los scripts a los que apuntan, habitualmente los
encontraremos en el directorio /etc/init.d (si bien no es obligatoria esta ubicación),
y normalmente responden estos scripts a una estructura tipo case.
Cuando pasamos a un nivel de ejecución dado, digamos el número 5, lo que
ocurre es que se ejecutan en orden estricto todos y cada uno de los scripts a los
que hacen referencia los enlaces simbólicos. Estos scripts se ejecutan con un único
argumento, que será start o stop dependiendo de si los enlaces simbólicos empiezan
por S o K respectivamente.
Es decir, si en el directorio rc5.d tenemos los siguientes enlaces simbólicos:
S01network --> /etc/init.d/network
S05nfs --> /etc/init.d/nfs
K01ypbind --> /etc/init.d/ypbind
el orden estricto implica por tanto que el primer script en ejecutarse será /etc/init.d/ypbind
(K es anterior a S), seguido de /etc/init.d/network (S01 es anterior a S05) y finalmente /etc/init.d/nfs
La forma de ejecutar estos scripts será por tanto:
3
/etc/init.d/ypbind stop
/etc/init.d/network start
/etc/init.d/nfs start
Lo cual nos da una idea de la sencillez a la hora de incluir scripts personales
para que se ejecuten de una determinada manera a la hora de pasar a un nivel de
ejecución concreto, pues lo que tendremos que hacer es ubicar nuestro script en
el directorio /etc/init.d y realizar un enlace simbólico en el directorio rcX.d que
consideremos oportuno, llamando a este script con la sintaxis correcta.
Hay que tener en cuenta que al ejecutarse en orden estricto, es conveniente tener
en cuenta qué scripts se ejecutan antes y después del que estamos modificando.
Por ejemplo deberı́amos tener en cuenta que si nuestro script ejecutará alguna
herramienta que necesite de la red para funcionar, deberı́a ejecutarse (si este es el
caso), con posterioriddad al script que arranca la red, por lo tanto si este último
está enlazado como S08network, nuestro script podrı́a ser S09script para que se
ejecute con posterioridad al arranque de la red.
Muchas veces equivocamos el sentido del fichero /etc/inittab al relacionarlo con
los niveles de ejecución. Este fichero indica qué procesos tienen que ejecutarse en el
arranque ası́ como en la operación habitual, y una de sus lı́neas indica qué nivel de
ejecución se utilizará, por defeto, al arrancar la máquina.
La lı́nea a la que hacemos referencia bien podrı́a ser:
id:3:initdefault:
en la que se indica que el nivel de ejecución por defecto, el que se ejecutará al
arrancar la máquina, será el nivel número 3.
No obstante nosotros podremos cambiar de nivel de ejecución fácilmente utilizando el comando telinit,
telinit 2
harı́a que nuestra máquina pasara al nivel de ejecución número 2, de tal forma
que podemos utilizar los comandos halt (o shutdown -h now ) y reboot (o shutdown
-r now para apagar la máquina o reiniciarla respectivamente, o bien sus análogos
telinit 0 y telinit 6 respectivamente.
En cualquier momento, podremos saber en qué nivel de ejecución estamos sin
más que teclear,
runlevel
2.
service
Estos scripts que tenemos en nuestro sistema pueden ejecutarse con la opción
stop o start cuando se cambia de nivel de ejecución, pero también los podremos
ejecutar mediante el comando service
4
service httpd start
por ejemplo arrancará el servidor web en nuestro ordenador, es decir, buscará el
script httpd en el directorio /etc/init.d y lo ejecutará con la opción start, sin tener
que escribir nosotros toda la ruta completa.
3.
chkconfig
Además de poder darle la opción start, podemos optar por proporcionarle la
opción stop o cualquier otra (status por ejemplo), que tuviera configurada el script.
Finalmente, si queremos configurar los distintos scripts que queremos que paren
o arranque al pasar a uno u otro nivel de ejecución, pero no nos atrae la idea de
estar borrando, modificando o creando enlaces simbólicos en los directorios correspondientes, siempre podremos hacer uso del comando chkconfig
La ejecución de este comando con la opción –list
chkconfig --list
nos mostrará en pantalla una lista con todos y cada uno de los scripts que pueden
arrancarse o pararse al cambiar de nivel de ejecución, describiendo su estado para
cada nivel de ejecución, es decir, nos indicarán si en el nivel 5, por ejemplo, se
arrancan o se paran, etc.
Un ejemplo de ejecución podrı́a ser:
xfs
3:activo
ypbind
3:desactivado
0:desactivado
4:activo
0:desactivado
4:desactivado
1:desactivado
5:activo
1:desactivado
5:desactivado
2:activo
6:desactivado
2:desactivado
6:desactivado
Con esta herramienta no sólo podremos listar el estado, sino que también podremos configurar un determinado script para que se le envı́e una señal stop a la
hora de pasar a un nivel de ejecución determinado:
chkconfig --level 35 sendmail off
que configurarı́a los directorios rc3.d y rc5.d de tal forma que se mandarı́a una señal
stop al script sendmail al pasar a cualquiera de estos dos niveles de ejecución.
Igual que hemos utilizado este comando para parar estos scripts, lo podrı́amos
haber hecho de forma equivalente para que arrancaran estos scripts cuando pasáramos a estos niveles de ejecución, pues lo único que habrı́a cambiado es on por
off.
5
Descargar