GeneralLinuxProgramaciónServidoresTecnologíaWeb

Introducción a los Servicios en Linux: Ejecutando un Servicio en Ubuntu 20.04

Los servicios en sistemas operativos Linux desempeñan un papel crucial al permitir la ejecución de procesos en segundo plano, automatizando tareas y garantizando que las aplicaciones se mantengan en funcionamiento incluso después de que un usuario cierre sesión. En este artículo, exploraremos qué son exactamente los servicios en Linux y cómo ejecutar un ejemplo concreto en Ubuntu 20.04.

Imagen: Pixabay

1. Introducción a los Servicios en Linux Los servicios en Linux son procesos que se ejecutan en segundo plano y proporcionan funcionalidades específicas del sistema o de las aplicaciones. Operan de manera independiente del inicio de sesión del usuario y son esenciales para mantener la disponibilidad y estabilidad del sistema.

2. ¿Por qué usar Servicios? Los servicios son esenciales para tareas como el arranque y apagado del sistema, la administración de redes, la gestión de bases de datos y muchas otras funciones críticas. Al ejecutarse en segundo plano, los servicios garantizan que estas tareas se realicen sin necesidad de intervención constante por parte del usuario.

Primero que nada vamos a utilizar los archivos mencionados, que se ubican en este repositorio: https://github.com/DaveSV/hello_linux_service/

3. Ejemplo de Ejecución de Servicio en Ubuntu 20.04 En este artículo, mostraremos un ejemplo concreto de cómo ejecutar un servicio en Ubuntu 20.04. Usaremos un archivo de servicio llamado «hello_cloud.service» que ejecuta un script Python llamado «hello_cloud.py» en el arranque del sistema que despliega en la pantalla algunos datos básicos que recolecta del servidor.

Asegúrate de que ambos archivos estén en la misma ubicación en tu servidor.

hello_cloud.py

#!/usr/bin/env python3
"""A simple Hello World type app which can serve on port 8000.
Optionally, a different port can be passed.

The code was inspired by:
https://gist.github.com/davidbgk/b10113c3779b8388e96e6d0c44e03a74
"""
import http
import http.server
import socket
import socketserver
import sys

# TCP port for listening to connections, if no port is received
DEFAULT_PORT=8000

class Handler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(http.HTTPStatus.OK)
        self.end_headers()
        # Hello message
        self.wfile.write(b'Hello Cloud')
        # Now get the hostname and IP and print that as well.
        hostname = socket.gethostname()
        host_ip = socket.gethostbyname(hostname)
        self.wfile.write(
            '\n\nHostname: {} \nIP Address: {}'.format(
                hostname, host_ip).encode())


def main(argv):
    port = DEFAULT_PORT
    if len(argv) > 1:
        port = int(argv[1])

    web_server = socketserver.TCPServer(('', port), Handler)
    print("Listening for connections on port {}".format(port))
    web_server.serve_forever()


if __name__ == "__main__":
    main(sys.argv)

hello_cloud.service

[Unit]
After=network.target

[Service]
ExecStart=/usr/local/bin/hello_cloud.py 80

[Install]
WantedBy=default.target

4. Creando el Archivo de Servicio Explicaremos cómo crear el archivo «hello_cloud.service» utilizando las secciones Unit, Service y Install para definir el comportamiento del servicio. Aseguraremos que el archivo contenga la ruta correcta del script Python y ajustaremos los permisos necesarios.

aquí tienes una explicación más detallada sobre cómo crear el archivo de servicio utilizando las secciones Unit, Service y Install:

Creación del Archivo de Servicio: Definiendo el Comportamiento del Servicio

En la administración de servicios en sistemas Linux, como Ubuntu 20.04, se utiliza el sistema systemd para controlar y gestionar procesos en segundo plano. Para crear un servicio, se define un archivo de configuración que describe cómo debe comportarse el servicio, cuándo debe iniciarse y cómo se debe manejar. A continuación, se explica cómo crear el archivo «hello_cloud.service» utilizando las secciones Unit, Service y Install:

  1. Sección Unit: Esta sección define las dependencias y el comportamiento general del servicio. Incluye información como las unidades que deben estar listas antes de que este servicio comience. En este caso, el servicio «hello_cloud» espera a que la unidad de red (network.target) esté disponible antes de iniciar.
  2. Sección Service: Aquí se define el comando o el proceso que el servicio debe ejecutar. En tu ejemplo, estás ejecutando un script Python llamado «hello_cloud.py» con un argumento «80». Esto indica que al iniciar el servicio, se ejecutará el script «hello_cloud.py» ubicado en /usr/local/bin/, pasándole «80» como argumento.
  3. Sección Install: Esta sección especifica cuándo y cómo el servicio debe ser habilitado e instalado en el sistema. Indica que este servicio debe ser habilitado y arrancado automáticamente cuando se inicie el sistema.
[Unit]
After=network.target
[Service]
ExecStart=/usr/local/bin/hello_cloud.py 80
[Install]
WantedBy=default.target

En conjunto, estas secciones definen el comportamiento del servicio «hello_cloud». Al crear y configurar adecuadamente el archivo «hello_cloud.service» con estas secciones, estás proporcionando a systemd las instrucciones necesarias para gestionar el servicio de manera eficiente.

Recuerda que las rutas y los nombres de archivos deben coincidir con tu caso específico. Al crear el archivo de servicio, asegúrate de que los comandos y las rutas sean precisos para que el servicio funcione correctamente.

5. Instalación y Habilitación del Servicio Detallaremos los pasos para instalar el servicio en Ubuntu 20.04, lo cual implica mover el archivo de servicio a la ubicación adecuada, recargar la configuración de systemd, iniciar el servicio y habilitarlo para que se inicie automáticamente en el arranque.

Para instalar y habilitar un servicio en Ubuntu 20.04 (o cualquier sistema basado en systemd), puedes seguir estos pasos:

  1. Coloca el archivo de servicio en la ubicación adecuada: En Ubuntu 20.04, la ubicación recomendada para los archivos de servicio systemd es /etc/systemd/system/.Abre una terminal y asegúrate de que estás en el directorio donde se encuentra tu archivo «hello_cloud.service». Luego, mueve el archivo a la ubicación correcta.
  2. Recargar systemd: Después de mover el archivo de servicio, recarga la configuración de systemd para que tome en cuenta los cambios.
  3. Iniciar y habilitar el servicio: Ahora, puedes iniciar y habilitar el servicio para que se inicie automáticamente al arrancar el sistema:
sudo mv hello_cloud.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start hello_cloud.service
sudo systemctl enable hello_cloud.service

6. Verificación y Mantenimiento Explicaremos cómo verificar el estado del servicio utilizando el comando systemctl status, que proporciona información sobre si el servicio se está ejecutando correctamente y si está habilitado.

sudo systemctl status hello_cloud.service

De igual forma puedes usar el comando «ps ax» para verificar el servicio:

ps ax | grep hello

7. Conclusión Los servicios son una parte esencial de los sistemas Linux, permitiendo la automatización y la continuidad de las tareas del sistema y las aplicaciones. A través de nuestro ejemplo práctico en Ubuntu 20.04, has aprendido cómo crear, instalar y ejecutar un servicio básico, sentando las bases para comprender mejor la gestión de servicios en un entorno Linux.

Puedes ver el avance en la creación del servicio simplemente accediendo a tu servidor mediante la dirección IP. Al iniciarse el servicio con el puerto 80 (standard para HTTP) no tendrás que definir ningún otro argumento. Veras una salida similar a esto con alguna información básica sobre el servidor:

¡Y … por supuesto! Puedes modificar el archivo «hello_cloud.py» para agregar información adicional que el servidor pueda proporcionar. Aquí hay un ejemplo simple de cómo podrías hacerlo:

#!/usr/bin/env python3

from http.server import BaseHTTPRequestHandler, HTTPServer

class HelloServer(BaseHTTPRequestHandler):
    def _set_response(self, content_type='text/html'):
        self.send_response(200)
        self.send_header('Content-type', content_type)
        self.end_headers()

    def do_GET(self):
        self._set_response()
        self.wfile.write("¡Hola desde el servidor en la nube!".encode('utf-8'))
        # Puedes agregar más información aquí, por ejemplo:
        self.wfile.write("\nEste es un ejemplo de servidor básico.".encode('utf-8'))

def run(server_class=HTTPServer, handler_class=HelloServer, port=80):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f"Servidor en ejecución en el puerto {port}")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

En este ejemplo hemos modificado ligeramente el código para que el servidor proporcione información distinta en la respuesta. Cuando se accede al servidor a través de un navegador web o una solicitud HTTP, se enviará la cadena «¡Hola desde el servidor en la nube!» junto con «Este es un ejemplo de servidor básico.»

Si utilizas el comando «curl» desde la linea de comandos obtendrás una respuesta como esta:

Puedes personalizar esta información adicional según tus necesidades. Simplemente agrega más líneas después de la línea que dice self.wfile.write("\nEste es un ejemplo de servidor básico.".encode('utf-8')).

Recuerda guardar los cambios en tu archivo «hello_cloud.py» y asegúrate de que el archivo de servicio esté configurado correctamente para ejecutar este nuevo código.

Luego, puedes reiniciar el servicio y acceder a través de un navegador web para ver la información adicional que agregaste.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *