Muy buenas lector, seguimos con la larga serie de posts dedicados a explotar al máximo el uso de la terminal de Linux (al final del posts tienes enlazados todos los artículos de la serie). En este caso nos centraremos en la gestión de servicios.

Básicamente verás los diferentes comandos que puedes utilizar tanto para controlar el estado de los diferentes servicios de tu sistema, como para iniciar, detener o reiniciar un servicio concreto. ¡Vamos allá!

Anuncios

Tabla de contenidos:

La Gestión de Servicios en GNU/Linux

A diferencia de Windows, donde suele haber herramientas gráficos para casi todo, en GNU/Linux muchos de las tareas relativas a la administración del sistema suelen hacerse por consola.

Por si esto no fuera poco, uno de los rasgos característicos de GNU/Linux es que solemos disponer de varios métodos o herramientas para llegar a hacer una misma cosa (como sucede justamente con el caso que nos ocupa). Esto puede crear una cierta sensación de desorden y de dispersión al principio, pero una vez sabido la dinámica no es para nada complicada.

El caso de la gestión de servicios es algo paradigmático, sobretodo con la adopción de systemd por parte de la mayoría de distribuciones, que ha supuesto también la llegada de todo un nuevo conjunto de métodos para el control de servicios. Métodos que, por otro lado, siguen conviviendo aún con los que teníamos antes de la implantación masiva de systemd.

Siendo así las cosas, he pensado que lo mejor es empezar por conocer las principales opciones que nos ofrece systemd de cara a la gestión de servicios, que en todas las distribuciones que utilizan systemd sería, por decirlo de algún modo, el método más “correcto” o “aceptado”.

Visto esto, te mostraré algunas otras opciones, como, como las que nos ofrece el veterano Init.d, que aunque se encuentra obsoleto, aún sigue siendo operativo en muchos casos.

Controlar Servicios con systemd y systemctl

Lo dicho, empecemos por veo los diferentes comandos que nos permiten controlar el estado de los diferentes servicios a través de systemd, que actualmente gestiona el proceso de arranque en gran parte de las distribuciones más comunes, incluyendo Debian, Ubuntu, Fedora, o gran parte de sus derivadas.

systemd nace como sustituto de System V para controlar la secuencia de arranque y la administración de servicios en GNU/Linux, aunque no ha estado exento de controversia, debido a su complejidad e invasión de funciones de otras herramientas para la administración del sistema. Aun así, es lo que tenemos en gran parte de las distribuciones a día de hoy.

Los diferentes objetos de control de systemd se denominan “unidades”. Para el control de dichas unidades, systemd utiliza una herramienta denominada systemctl, que es la que utilizaremos a continuación para controlar el estado de los diferentes servicios. ¡Vamos alla!

Comprobar el Estado Actual de un Servicio

Lo primero que se te puede ocurrir, antes de nada, es conocer todos los servicios cargados en tu sistema. Para ello, puedes valerte del comando que te dejo a continuación. El output puede resulta algo ininteligible, debido a la gran cantidad de servicios que aparecerán.

sudo systemctl status

Visto esto, vamos a centrarnos ya en un servicio determinado. Como ejemplo,voy a utilizar el servicio ufw, que es el que va asociado a UFW, el script que se encarga de gestionar el cortafuegos del kernel en Ubuntu derivados. Para conocer el estado de ufw puedes valerte de la siguiente sentencia:

sudo systemctl status ufw

Ojo, con el comando que acabas de ejecutar lo que estamos comprobando es que el servicio o demonio de UFW esté activo en memoria o no. No es lo mismo que UFW como tal esté habilitado (y por tanto aplicando sus reglas en el cortafuegos del kernel) o no. Esto ultimo se debe controlar directamente desde los propios comandos de UFW.

Iniciar, Detener o Reiniciar un Servicio

Sigamos con la parte de iniciar y detener servicios en tiempo real. Continuando con el ejemplo anterior, para iniciar el servicio ufw utilizaremos la sentencia que muestro debajo. Por defecto lo más probable es que el output te indique que el servicio está activo, independientemente de que el script este o no aplicando las reglas (que controlamos a través de los comandos que provee el propio UFW).

sudo systemctl start ssh

De forma análoga, si lo que quieres es detener el servicio, puedes utilizar el comando que verás a continuación. Esto detendrá, al momento, la ejecución del servicio, pero no alterará su orden de ejecución en el siguiente arranque del sistema.

sudo systemctl stop ufw

Otra opción imprescindible (seguramente mucho más utilizada que las anteriores), es la de reiniciar un servicio. Esto puede ser útil sobretodo se has modificado el fichero de configuración asociado a un determinado servicio, para que empiece a ejecutarse teniendo en cuenta dichos cambios. El comando es tan simple como esto:

sudo systemctl restart ufw

Adicionalmente a la opción de reiniciar, existe la opción de recargar la configuración de un servicio, sin reiniciarlo completamente. Esto, en teoría sirve para ahorrar algo de tiempo, pero personalmente creo que es más segura la opción anterior, y más teniendo en cuenta el poco tiempo que se tarda en reiniciarse el servicio. Aún así, no está de más conocer la opción.

sudo systemctl reload ufw

Hasta ahora hemos visto como controlar los servicios en tiempo real. A continuación vamos a ver como controlar su ejecución en el momento del arranque.

Comprobar el Estado de Arranque

Aparte de conocer el estado actual de un servicio, también puede ser interesante conocer su estado durante el arranque del sistema. Es decir, comprobar si el servicio esta configurado para iniciarse en cada arranque o no. Esto puedes verlo ejecutando el siguiente comando, siguiendo con el ejemplo de ufw:

sudo systemctl is-enabled ufw

Y ahora que conoces su estado de arranque, también te puede interesar saber como habilitar o deshabilitar su ejecución en cada arranque. Esto lo vemos a continuación.

Habilitar o Deshabilitar un Servicio

Antes has visto como iniciar un determinado servicio de forma manual. Algo que tiene efecto en el momento presente, pero nada más. Si lo que quieres es habilitar un servicio para que se inicie con cada arranque del sistema, entonces te interesa utilizar el siguiente comando:

sudo systemctl enable ufw

Del mismo modo, para deshabilitar un servicio para que deje de ejecutarse durante el arranque del sistema te puedes valer de la sentencia que dejo debajo. Ojo, esto no iniciará el servicio en el momento presente (en caso de estar apagado). Simplemente establecerá que se empiece a iniciar de forma automática a partir del siguiente arranque.

sudo systemctl enable ufw

Estos son los comandos más importantes que debes conocer de cara al control de servicios a través de systemd y systemctl, y constituyen la forma más “estándar” de hacerlo, en todas las distribuciones que hacen uso de systemd, tales como Ubuntu, Debian y muchas de sus respectivas derivadas.

Controlar Servicios Utilizando Service

Como comentaba al principio, también existen otras formas para controlas los servicios en GNU/Linux. Una de ellas es a través de la utilidad service, que ofrece una serie de comando muy parecidos a los que ya hemos visto, y que básicamente hacen lo mismo. Te puede servir como alternativa a systemctl, o también si utilizas una distribución que no haga uso de systemd.

Comprobar el Estado Actual

Antes de nada, y al igual que hemos hecho con systemctl, veamos los diferentes servicios cargados en el sistema. Para ello, puedes valerte del comando que te dejo a continuación. El output es algo diferente al que hemos visto utilizando systemctl, y, en mi opinión, ofrece una visión mucho más clara y entendible. Aquí verás un listado plano de todos los servicios, con un [+] o un [-] delante dependiendo de si están cargados o no.

sudo service --status-all

Otra opción interesante es la que te permite filtrar el resultado anterior. Como ejemplo, nos puede interesar que se muestren únicamente los servicios que estén iniciados actualmente. Esto puedes hacerlo con la siguiente sentencia:

sudo service --status-all | grep +

Y ahora toca ver el estado de un servicio concreto. En este caso, el comando es muy parecido al utilizado con systemctl, y el output, almenos a simple vista, me ha parecido exactamente igual.

sudo service ufw status

Ojo, como he mencionado antes en el caso de systemctl, con el comando que acabas de ejecutar lo que estamos comprobando es que el servicio o demonio de UFW esté activo en memoria. No es lo mismo que UFW como tal esté habilitado (y por tanto aplicando sus reglas en el cortafuegos del kernel) o no.

Iniciar, Detener o Reiniciar Servicios

Los comandos para iniciar o detener un servicio utilizando service son muy similares a los utilizados con systemctl. Empezando por iniciar un servicio, la sentencia sería la siguiente (basándome en el mismo ejemplo de ufw):

sudo service ufw start

De forma análoga, si lo que quieres es detener el servicio, puedes utilizar el comando que verás a continuación. Esto detendrá la ejecución del servicio en el momento actual, pero no alterará su orden de ejecución en el siguiente arranque del sistema.

sudo service ufw stop

Y finalmente tenemos la opción de reiniciar, que la que seguramente necesitarás utilizar más, sobretodo si sueles hacer cambios en los ficheros de configuración.

sudo service ufw restart

Con esto acabo con los comandos relativos a service. Ahora pasaré a indicarte cuatro comandos básicos para hacer los mismo utilizando Init.d.

Controlar Servicios Utilizando Init.d

Por último, veamos como podemos hacer lo mismo pero echando mano de Init.d, que básicamente era el método que se utilizaba antes, cuando teníamos System V como gestor de arraque. Lo diferencia más importante con la que nos encontramos aquí es que para invocar un determinado servicio, lo que hacemos es especificar la ruta en la que se encuentra, dentro del directorio init.d, seguido de la orden concreta (status, start, stop, etc.).

Comprobar Estado Actual de un Servicio

Para comprobar el estado de un determinado servicio, en este caso ufw, lo que hacemos es indicar la ruta del fichero de configuración dentro del directorio init.d, seguido de la orden status. Puesto en practica quedaría del siguiente modo. El output verás que es igual que en los casos anteriores.

sudo /ent/init.d/ufw status

Iniciar, Detener o Reiniciar un Servicio

Para iniciar el servicio (en el caso hipotético de que estuviera detenido, que no es lo que ocurre en el caso de ufw, pero sirve como ejemplo), simplemente seguimos con el mismo criterio, pero cambiando la orden del final.

sudo /etc/init.d/ufw start

Para detener el servicio, lo mismo. Al igual que en los otros casos, esto detiene la ejecución actual del servicio, pero no modifica su estado en el arranque del sistema.

sudo /etc/init.d/ufw stop

Y lo mismo con reiniciar el servicio, simplemente cambiando la orden del final. Como en los otros casos, la orden de reiniciar el servicio es la que necesitas utilizar cada vez que realices algún cambio en el fichero de configuración asociado.

sudo /etc/init.d/ufw restart

Con esto llego al final de la parte dedicada a Init.d, y también al final del post. Recuerda que a día de hoy, en gran parte de las distribuciones más populares ya se utiliza systemd para el control del arranque y la gestión de servicios, por lo que, salvo que utilices una versión bastante antigua, o una distribución que no haga uso de systemd, la forma más “estándar” para operar es a través de systemctl.

Esto Continua

Tampoco me quiero ir sin recordarte que este post forma parte de una serie de artículos enfocados a profundizar en el uso de la terminal. Si quieres seguir con el tema, te presento los enlaces hacía el resto de posts de esta serie:

Si conoces más comandos para crear, leer o concatenar archivos de texto, no dudes en hacer tus propias aportaciones a través de los comentarios. La idea es que el post se pueda ir actualizando y completando con más información.

Para terminar, si has encontrado útil el artículo, me servirá de gran ayuda si lo compartes en Twitter. Hasta la próxima;)