Capítulo 9: Administración del servidor Ubuntu 14.04 LTS



9.4. Gestión de servicios

Los servicios, también llamados demonios en la terminología Unix, son programas que se ejecutan en segundo plano para ofrecer una función concreta de forma independiente del usuario que pueda iniciar sesión en el sistema.

Existen servicios que monitorizan el sistema, que comprueban si existen actualizaciones pendientes de instalar, que controlan el reloj del sistema y lo actualizan a través de la red cuando sea necesario, que gestionan la conexión de red y avisan cuando algo no va bien, etc.

En la siguiente tabla se incluyen algunos de los servicios más frecuentes en Linux:

También es frecuente encontrar servicios que no están relacionados con el funcionamiento del propio sistema, sino con la funcionalidad que éste ofrece a equipos cliente. En esta categoría se encuentran los siguientes:

Aunque en un sistema Linux en funcionamiento existen multitud de servicios en ejecución, su administración es relativamente sencilla. Sólo habrá que saber dónde se encuentran y cómo gestionarlos (iniciarlos, reiniciarlos, pararlos, etc).

Gestionar los servicios

En otras distribuciones la carpeta puede ser /etc/rc.d/init.d.

Cuando se instala un programa que lleva asociado algún servicio (como el servidor de impresión CUPS o el servidor web Apache), el proceso de instalación guarda en el directorio /etc/init.d el script necesario para controlarlo. Esto ocurre también con los servicios propios del sistema operativo.

En resumidas cuentas, lo que esto significa es que en la carpeta /etc/init.d se encuentran todos los scripts que se utilizan para administrar los servicios que pueden ejecutarse en Ubuntu 14.04 LTS.

El número de archivos almacenados dependerá de las funciones para las que esté configurado el sistema y de los dispositivos hardware instalados.

1

Contenido de la carpeta /etc/init.d.

Estos scripts se programan de modo que reconozcan los siguientes argumentos:

  • start: Permite iniciar un servicio de forma manual. Por ejemplo, para iniciar el servicio vboxadd escribiremos la siguiente orden:
sudo /etc/init.d/vboxadd start

2

El script devuelve un mensaje indicando si la acción se ha completado con éxito

  • stop: Permite detener un servicio que se está ejecutando en estos momentos. Por ejemplo, para detener el servicio anterior, escribiremos lo siguiente:
sudo /etc/init.d/vboxadd stop

3

vboxadd es un servicio que no puede detenerse y, cuando lo intentamos, nos devuelve un error

  • restart: Equivale a realizar las dos operaciones anteriores. Primero detiene el servicio y después lo inicia. Para reiniciar el servicio anterior, escribimos esto:
sudo /etc/init.d/vboxadd restart

4

Como ya imaginabas, volvemos a obtener el mismo error que antes, porque, de nuevo, no ha podido detenerse.

  • status: Nos permite consultar el estado en el que se encuentra un servicio. Para comprobarlo, sólo tenemos que escribir lo siguiente:
sudo /etc/init.d/vboxadd status

5

Así comprobamos que el servicio se está ejecutando.

Desde la versión 9.10 de Ubuntu, comenzó a implantarse Upstart como sustituto del servicio init, que es quien se encarga de iniciar los servicios durante el inicio del sistema, detenerlos cuando apagamos y controlar su funcionamiento mientras están activos.

La ventaja de Upstart es que controla los servicios atendiendo a sus eventos, lo que le permite aumentar su rendimiento.

El inconveniente de todo esto es que, dentro de /etc/init.d, además de los scripts tradicionales podemos encontrar los Upstart jobs (o tareas Upstart, en español). Así, si intentamos aplicar con algunos servicios lo que acabamos de aprender, podemos encontrarnos con un error como el de la imagen siguiente:

1

El script cron ha sido convertido en un Upstart job.

Para ver el estado de este tipo de servicios, podemos utilizar el comando initctl list.

2

De esta forma obtenemos la lista completa de los servicios que se están ejecutando en el sistema.

Para obtener información referente a un servicio concreto, podemos canalizar la salida a través del comando grep:

sudo initctl list | grep cron

3

En este caso, también aparece el comando anacron porque coincide con la búsqueda.

Además, realizaremos la gestión de servicios Upstart con los siguientes comandos:

  • start: Permite iniciar la ejecución de un servicio. Por ejemplo, para iniciar el servicio cron, ejecutaremos lo siguiente:
sudo start cron

4

Como antes, recibimos un mensaje informativo, aunque ahora también se incluye el PID del proceso.

  • stop: Permite detener la ejecución de un servicio. Por ejemplo, para detener el servicio anterior escribimos esto:
sudo stop cron

5

De nuevo, recibimos un mensaje informativo.

  • restart: Equivale a realizar las dos operaciones anteriores. Primero detiene el servicio y después lo inicia. Para reiniciar el servicio anterior, escribimos esto:
sudo restart cron

6

Debemos observar que cuando reiniciamos el servicio, recibe un PID diferente.

El comando service

Este comando permite gestionar de forma indistinta tanto scripts tradicionales como Upstart jobs. Además, cuando usamos scripts, evitamos la necesidad de escribir la ruta completa.

La forma de realizar las acciones anteriores utilizando el comando service sería la siguiente:

  • service … start: Permite iniciar la ejecución de un servicio. Por ejemplo, para iniciar el servicio cron, ejecutaremos lo siguiente:
    sudo service cron start
  • service … stop: Detiene un servicio que se está ejecutando. Por ejemplo, para detener el servicio anterior, escribiríamos esto:
    sudo service cron stop
  • service … restart: Equivale a realizar las dos operaciones anteriores. Primero detiene el servicio y después lo inicia. Para reiniciar el servicio anterior, escribimos esto:
    sudo service cron restart
  • service … status: Nos permite consultar el estado en el que se encuentra un servicio. Para comprobarlo, sólo tenemos que escribir lo siguiente:
    sudo service cron status

En este caso también podemos comprobar el estado de todos los servicios utilizando el siguiente comando:

sudo service --status-all

Iniciar o parar servicios durante el arranque del sistema

Muchas veces, conviene que los servicios se inicien de forma automática durante el arranque del sistema, sin esperar a que el administrador los ponga en funcionamiento y sin que ni siquiera sea necesario que haya iniciado una sesión local ninguno de los usuarios.

Esto ocurre, por ejemplo, cuando instalamos un servidor NFS (lo veremos en el capítulo 10). El servicio que atiende las conexiones de usuarios a través de la red local debe estar disponible, de forma automática, en cuanto el servidor haya terminado de arrancar.

La ejecución automática de servicios se organiza en Linux en base a los niveles de ejecución. Cada nivel de ejecución en particular iniciará o detendrá unos servicios en concreto. Recuerda que ya hemos hablado en el capítulo 8 de los niveles de ejecución (concretamente, en el apartado Ajustes tras la instalación de Ubuntu 14.04 LTS).

Los servicios que se inician con cada nivel de ejecución se guardan en los directorios /etc/rc*.d (encontraremos directorios desde rc0.d a rc6.d y rcS.d).

1

Directorios /etc/rc*.d

Sin embargo, lo cierto es que se trata únicamente de enlaces simbólicos a elementos del directorio /etc/init.d. En realidad, es en este directorio donde se almacenan los scripts que forman parte de la secuencia de arranque de la mayoría de distribuciones de tipo Debian.

Si tomamos como ejemplo el contenido del directorio /etc/rc1.d, podemos observar que, efectivamente se trata de enlaces simbólicos (por ejemplo, K20rsync hace referencia a ../init.d/rsync).

2

Contenido de /etc/rc1.d.

A simple vista, también podemos observar una diferencia entre los nombres de unos scripts y otros: unos comienzan con la letra K y otros con la letra S. El motivo es que, al arrancar el sistema en el nivel de ejecución correspondiente (en este caso, el 1), los scripts que comienzan con la letra K finalizan servicios (Kill) y los que comienzan con la letra S los inician (start). En definitiva, lo que hacen es pasar el argumento stop o start al script adecuado en /etc/init.d.

Si un servicio debe correr únicamente en un nivel de ejecución particular, dispondrá de un script de inicio (cuyo nombre comenzará por la letra S) en la carpeta correspondiente a dicho nivel, mientras que en las carpetas del resto de los niveles de ejecución deberá aparecer un script de finalización (cuyo nombre comenzará por la letra K). De esta forma, cuando cambiemos de nivel de ejecución, se detendrán todos los servicios innecesarios.

El número que sigue a la letra inicial hace que cada script se ejecute en un orden determinado. El número particular no es importante, pero lo que sí importa es la secuencia, para que algunos servicios puedan iniciarse, o pararse, antes que otros.

¿Cómo funcionan los scripts de inicio?

En otras distribuciones, el nivel de ejecución predeterminado se guarda en /etc/inittab. Sin embargo, en Ubuntu se guarda dentro del archivo /etc/init/rc-sysinit.conf, en la variable DEFAULT_RUNLEVEL.

Cuando arranca el sistema, se ejecuta el script /etc/init.d/rcS. Su misión será ejecutar, de forma ordenada, todos los scripts que comiencen por la letra S en el directorio /etc/rcS.d. A cada uno de ellos les pasa, como primer argumento, el valor start. Por el momento, el nivel de ejecución es N (none).

En esta etapa, sólo deben ejecutarse los elementos imprescindibles para llevar al sistema hasta un estado consistente. En este nivel no debe iniciarse ningún servicio a menos que resulte imprescindible.

Después de ejecutar los scripts que hay en /etc/rcS.d, el proceso de inicio cambia al nivel de ejecución predeterminado, que suele ser 2. A partir de ahí, se ejecuta el script /etc/init.d/rc, que irá iniciando, uno a uno, los servicios que encuentre en /etc/rc2.d (es el directorio que corresponde al nivel de ejecución).

Dado que el nivel de ejecución anterior era N, los scripts que comienzan por K no se ejecutan, ya que aún no hay ningún servicio que detener.

Lo comentado hasta ahora es válido de forma general para todos los niveles de ejecución, pero existen algunas cuestiones particulares:

  • El nivel de ejecución Monousuario: Llegamos a él cambiando al nivel de ejecución 1. Esto detendrá todos los servicios del sistema (como si todos tuviesen un script K en el directorio /etc/rc1.d). Después, se producirá un cambio al nivel de ejecución S, que no suele tener scripts, y se genera una shell para mantenimiento directamente en /dev/console.
  • Cuando paramos o reiniciamos el sistema (cambiando a los niveles de ejecución 0 o 6, respectivamente), se ejecutarán en orden todos los scripts K contenidos en el directorio correspondiente (/etc/rc0.d o /etc/rc6.d). A continuación, si existe algún script S, también se ejecuta de forma ordenada, pero enviando un argumento stop.

Administrar servicios con Boot-Up Manager

Aunque es importante conocer la base del funcionamiento de los servicios en Ubuntu 14.04 LTS y tener así una idea cercana de cómo funcionan las cosas, yo recomiendo utilizar la interfaz gráfica para administrar los servicios y programas que se inician con el sistema. Así simplificaremos considerablemente la tarea y nos evitaremos cometer errores. La herramienta perfecta para esta labor es Boot-Up Manager (también conocido por la abreviatura BUM).

Puedes encontrar la página oficial de Boot-Up Manager en la siguiente dirección: http://www.marzocca.net/

Boot-Up Manager permite una configuración sencilla de los servicios de inicio tanto para los usuarios como para los niveles de ejecución del sistema, así como la modificación de la prioridad de inicio y parada de los servicios.

Una de las características mas interesantes de Boot-Up Manager es que muestra todos los servicios que se encuentren instalados en el equipo, sin importar que estén activos o no.

Como este programa está incluido en los repositorios oficiales de Ubuntu 14.04 LTS, su instalación es tan sencilla como abrir una ventana de terminal y escribir el siguiente comando:

sudo apt-get install bum

Aunque también podemos recurrir al Centro de software de Ubuntu 14.04 LTS. Introducimos parte de su nombre en el cuadro de búsqueda…

1

… Cuando lo encontremos, sólo tenemos que seleccionarlo y hacer clic sobre el botón Instalar.

Una vez instalado, lo ejecutamos recurriendo al Dash:

2

Comenzamos a escribir parte de su nombre y, cuando aparezca, hacemos clic sobre él.

Dado que Boot-Up Manager está pensado para que lo usen administradores, lo primero que hace es pedir que nos autentiquemos

3

Escribimos la contraseña de administración y hacemos clic sobre el botón Aceptar.

4

Así, llegamos a la ventana principal del programa:

En la parte inferior, encontramos una casilla de verificación junto a la palabra Avanzado.

5

Cuando la seleccionamos aparecen tres nuevas solapas: Resumen, Servicios y Scripts de inicio y apagado.

A continuación vamos a realizar un pequeño repaso de cada una de ellas:

  • La solapa Resumen es la que contiene la información que aparecía antes de marcar la casilla Avanzado. Nos ofrece una visión general de los servicios que están activados durante el arranque. En la columna de la derecha podremos ver en qué estado se encuentra el servicio:
    • Un icono como este Servicio activo, indica que el servicio está actualmente en funcionamiento.
    • Si el icono es así Servicio inactivo, indica que el servicio no está funcionando en estos momentos.
    • Cuando el icono es Configuración inicial, indica que el servicio se ha ejecutado durante el inicio del sistema para ofrecer una configuración inicial y, una vez completado su trabajo, ha dejado de ejecutarse. A este tipo de servicios se les suele llamar one-shot (un disparo)
    • Y, por último, si el icono es Estado desconocido, es que Boot-Up Manager no ha sido capaz de detectar si el script se está ejecutando.

    Podemos activar o desactivar cualquiera de ellos haciendo clic sobre su casilla de verificación

  • La solapa Servicios nos ofrece un mayor detalle sobre los servicios y podremos establecer de una forma más detallada el nivel de ejecución en el que se ejecuta cada uno de ellos. Además, en la parte inferior de la ventana, aparece una breve descripción del servicio (aunque la mayoría de las veces se encuentra vacío).

6

Aspecto de la solapa Servicios.

  • El título de la solapa Scripts de inicio y apagado se explica por sí solo. Muestra los scripts que se ejecutan cuando arrancamos o apagamos la máquina. En este caso, por cuestiones de seguridad, Boot-Up Manager no permite hacer cambios en la configuración.

Si, por ejemplo, necesitamos cambiar la prioridad de inicio o parada de un servicio, sólo tenemos que hacer clic sobre su nombre con el botón derecho del ratón.

7

En el menú de contexto que aparece, elegimos Cambiar prioridad de inicio/parada.

En ese momento, aparecerá una nueva ventana donde podemos elegir el número que indica el orden en el que se iniciará o se parará el servicio.

8

Después haremos clic sobre el botón Aceptar para validar los cambios o en Cancelar si preferimos dejarlo como estaba.

Para que los cambios se hagan efectivos, debemos recordar que hay que pulsar al final el botón Aplicar. Tendremos la oportunidad de aplicar los cambios en el momento, lo que implica que los scripts se detendrán y se volverán a iniciar, o esperar al siguiente reinicio.

9

Para que los cambios sean efectivos en este momento, haremos clic sobre el botón .