I - Intro
Durante mi etapa laboral de help-desk, service-desk…y algo-desk, donde básicamente las tareas son intervenciones técnicas de gran variedad donde no hay clientes finales sino usuarios internos de una empresa; veía cómo los SysAdmin realizaban algunas de sus tareas, sobre servidores Windows o Linux. O incluso a veces me tocaba ejecutarlas a mí.
Quería aprender más sobre Linux. Me despertaba curiosidad saber cómo hacían para que sus propios programas corrieran como un servicio, por ejemplo.
Eso mismo haremos en este post: crear un servicio propio básico para obtener información y monitorear recursos del sistema.
II Planificación
Primero, hagamos un plan de acción con una lista de accionables tipo diagrama del laboratorio.
Luego, al desarrollar cada punto trabajaremos en los aspectos más granulares.
-
Requisitos.
-
El script.
-
El servicio.
-
Ejecución de todo el flujo de trabajo.
-
Conclusión.
III Requisitos
- ¡Leer los posts anteriores! Ya que están completamente ligados a este tema, la idea es hacer un laboratorio práctico con los conceptos, términos y comandos aprendidos en:
-
Contar con una distro de Linux con Systemd como administrador de servicios.
-
Acceso a
sudo.
IV El Script
¿Qué es un script y qué hace?
La traducción al español de script es guión. En cierta forma, es lo que hace un script en informática.
Un script informático es un programa que ejecuta comandos de forma secuencial, tal como un guión…primero un comando, luego otro, y así sucesivamente.
¿Cuál es la función del script en nuestro flujo de trabajo?
En nuestro caso de laboratorio, el script se encarga de recolectar información general y de recursos del sistema al momento de la ejecución.
Lo hace ejecutando múltiples comandos y mostrando la información que obtiene con ellos.
Este es un ejemplo de lo que mostrará cada vez que se ejecute:
***Inicio de ejecución***
***Fecha y hora actual: vie 18 oct 2025 09:23:47 CEST***
***Servicio de Monitoreo Básico***
***Datos Generales del Sistema:
Sistema Operativo: Ubuntu 24.04.1 LTS
Nombre del sistema: slimbook-dev
Versión del Kernel: 6.8.0-45-generic
Chassis: laptop 💻
Hardware Model: Slimbook Executive 14
Red: default via 192.168.0.1 dev wlp3s0 proto dhcp src 192.168.0.105 metric 600
IP pública : 2a02:c7e:3012:4800::1
***Recursos del Sistema:
Número de CPUs: 8
Modelo de CPU: Intel Core i7-1165G7 @ 2.80GHz
Memoria RAM total: 16Gi
Memoria RAM disponible: 9,2Gi
Memoria RAM utilizada: 4,8Gi
Espacio total en la partición /: 512G
Espacio disponible en /: 387G
Porcentaje utilizado en /: 24%
Tiempo de Actividad: up 3 hours, 42 minutes
Usuarios conectados: 1
***Fin de la ejecución***
-
Observar que los comandos que ejecuta son variados sin embargo casi todos comienzan con
echo.Echoes un comando que imprime en la terminal, es decir que “muestra en pantalla” texto. En nuestro caso de uso, estamos combinandoechojunto a otros comandos.Recomiendo experimentar con estos comandos ejecutándolos sin el script, manualmente uno a la vez, y también modificar el script a gusto.
La siguiente línea de código le especifica al programa que guarde el resultado de la ejecución, es decir la salida o
outputen el archivo/var/log/systemInfo.log:LOG_FILE="/var/log/systemInfo.log" -
Crear el siguiente archivo con tu editor de texto favorito -en mi caso utilicé
vim:sudo vim /usr/local/bin/systemInfo_v1.sh -
Copiar y pegar el siguiente contenido, luego guardar los cambios:
#!/bin/bash #Publicado en **Proyecto LEETI*** #---> https://www.proyectoleeti.com <--- LOG_FILE="/var/log/systemInfo.log" { echo '***Inicio de ejecución***' echo '***Fecha y hora actual:' $(date)'***' echo '' echo '***Servicio de Monitoreo Básico***' echo '' echo '***Datos Generales del Sistema:' echo '' source /etc/os-release echo 'Sistema Operativo:' $PRETTY_NAME echo 'Nombre del sistema:' $(hostname) echo 'Versión del Kernel:' $(uname -r) echo $(hostnamectl | grep 'Chassis') echo $(hostnamectl | grep 'Hardware Model') echo 'Red:' $(ip route | grep default) echo 'IP pública :' $(curl -s ifconfig.me) echo '' echo '***Recursos del Sistema:' echo '' echo 'Número de CPUs:' $(nproc) echo 'Modelo de CPU:' $(lscpu | grep 'Model name' | sed 's/Model name: *//') echo 'Memoria RAM total:' $(free -h | grep Mem | awk '{print $2}') echo 'Memoria RAM disponible:' $(free -h | grep Mem | awk '{print $7}') echo 'Memoria RAM utilizada:' $(free -h | grep Mem | awk '{print $3}') echo 'Espacio total en la partición /:' $(df -h / | tail -1 | awk '{print $2}') echo 'Espacio disponible en /:' $(df -h / | tail -1 | awk '{print $4}') echo 'Porcentaje utilizado en /:' $(df -h / | tail -1 | awk '{print $5}') echo 'Tiempo de Actividad:' $(uptime -p) echo 'Usuarios conectados:' $(who | wc -l) echo '' echo '***Fin de la ejecución***' echo '' } | tee -a "$LOG_FILE" -
Es necesario agregar el permiso de ejecución al archivo para poder, justamente, ejecutarlo:
sudo chmod +x /usr/local/bin/systemInfo_v1.sh -
Probar el script, debería mostrar la información obtenida del sistema, al igual que el ejemplo mostrado al inicio de este capítulo IV.
sudo /usr/local/bin/systemInfo_v1.shO bien revisando el archivo con el
output:cat /var/log/systemInfo.log
V El servicio
¿Cuál es la función del servicio en nuestro flujo de trabajo?
El servicio permitirá administrar nuestro script directamente con systemd, por lo que nos brindará las siguientes ventajas:
-
Fácil administración (iniciarlo, detenerlo, ver el estado).
-
Ejecutarlo de forma automatizada.
-
Registrar logs.
-
Practicar un flujo de programa propio típico de un entorno profesional.
-
Como vimos en el post anterior, el archivo
unitsirve al servicio de las configuraciones necesarias para su ejecución, en nuestro caso, crearemos el siguiente archivounit, el nombre del archivo también le dará nombre al servicio:sudo vim /etc/systemd/system/systemInfo.service -
El servicio se ejecutará una sola vez al inicio del sistema (
oneshot) y lo hará después de que carguen los servicios de red (network.online.target). -
Copiar y pegar el contenido:
[Unit] Description=Servicio de Monitoreo Básico Documentation=https://www.proyectoleeti.com After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/systemInfo_v1.sh StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target -
Para probarlo, primero necesitamos recargar
systemctlya que hay un nuevo servicio que administrar:sudo systemctl daemon-reload -
Ahora sí, ya casi! Verificar primero el estado del servicio con
sudo systemctl status systemInfo, mostrará una salida similar a la siguiente:sudo systemctl status systemInfo -
○ systemInfo.service - Servicio de Monitoreo Básico Loaded: loaded (/etc/systemd/system/systemInfo.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: https://www.proyectoleeti.com -
Luego iniciarlo con
sudo systemctl start systemInfo:sudo systemctl start systemInfo -
En este punto, debió suceder lo siguiente:
-
Iniciar el servicio
systemInfo. -
Ejecutar el script
/usr/local/bin/systemInfo_v1.sh. -
Escribir la información recolectada en el archivo
/var/log/systemInfo.log. -
Detener el servicio
systemInfo.
-
-
¿Cómo verificamos si se ejecutó bien? Tenemos más de una forma:
-
Ejecutar
sudo systemctl status systemInfolo cual nos mostrará información valiosa como última fecha/hora de ejecución, ID de proceso y su estado de ejecución, como así también las últimas líneas del log:Active: inactive (dead) since Sun 2025-10-19 17:01:52 CEST; 3s ago Main PID: 31006 (code=exited, status=0/SUCCESS) oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: Memoria RAM disponible: 5,9Gi oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: Memoria RAM utilizada: 6,8Gi oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: Espacio total en la partición /: 476G -
Revisar los logs del servicio, a través de:
sudo journalctl -u systemInfo.service -
Para mostrar más logs presionar la barra espaciadora hasta llegar al final del
journal:-
sudo journalctl -u systemInfo oct 17 12:56:13 slimbook-dev systemd[1]: Starting systemInfo.service - Servicio de Monitoreo Básico... oct 17 12:56:13 slimbook-dev systemInfo_v1.sh[21142]: ***Inicio de ejecución*** oct 17 12:56:13 slimbook-dev systemInfo_v1.sh[21142]: ***Servicio de Monitoreo Básico*** oct 17 12:56:13 slimbook-dev systemInfo_v1.sh[21142]: ***Datos Generales del Sistema: oct 17 12:56:13 slimbook-dev systemInfo_v1.sh[21142]: Fecha y hora: vie 17 oct 2025 12:56:13 CEST ... oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: Tiempo de Actividad: up 4 hours, 55 minutes oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: Usuarios conectados: 3 oct 19 17:01:52 slimbook-dev systemInfo_v1.sh[31008]: ***Fin de la ejecución*** oct 19 17:01:52 slimbook-dev systemd[1]: systemInfo.service: Deactivated successfully. oct 19 17:01:52 slimbook-dev systemd[1]: Finished systemInfo.service - Servicio de Monitoreo Básico.
-
-
Verificar el archivo de log propio del script, revisar el contenido del archivo con comandos como
cat,lessoview:view /var/log/systemInfo.log -
Una vez confirmado que funciona, habilitar el servicio para que se inicie automáticamente en cada inicio del OS, es decir, cargado por
init:sudo systemctl enable systemInfo -
Obtendremos una salida similar a la siguiente:
Created symlink /etc/systemd/system/multi-user.target.wants/systemInfo.service → /etc/systemd/system/systemInfo.service.
-
Galería de screenshots:

VI Ejecución de todo el flujo de trabajo
Para recrear una prueba completa, basta con reiniciar el sistema. El servicio debe haberse ejecutado junto al script, y finalizado tras escribir la información recolectada en el archivo de systemInfo.log.
Revisarlo con cualquiera de los tres métodos mostrados en el capítulo anterior V. Recordar que el script registra la fecha y hora de cada ejecución por un lado, y por otro lado, el journal hace lo propio con el servicio. Ambas ejecuciones deben coincidir.
Les comparto otro ejemplo del script, pero ejecutado en una VM (máquina virtual) con Ubuntu bajo Proxmox en un BMS (bare metal server):
***Inicio de ejecución***
***Fecha y hora actual: jue 23 oct 2025 09:31:54 UTC***
***Servicio de Monitoreo Básico***
***Datos Generales del Sistema:
Sistema Operativo: Ubuntu 22.04.5 LTS
Nombre del sistema: vm-dev-ubu-22-04
Versión del Kernel: 5.15.0-160-generic
Chassis: vm
Hardware Model: Standard PC _i440FX + PIIX, 1996_
Red: default via 10.0.0.1 dev ens18 proto static
IP pública : 43.70.61.121
***Recursos del Sistema:
Número de CPUs: 1
Modelo de CPU: QEMU Virtual CPU version 2.5+
Memoria RAM total: 1,9Gi
Memoria RAM disponible: 1,6Gi
Memoria RAM utilizada: 130Mi
Espacio total en la partición /: 15G
Espacio disponible en /: 6,9G
Porcentaje utilizado en /: 51%
Tiempo de Actividad: up 0 minutes
Usuarios conectados: 0
***Fin de la ejecución***
VII Conclusión
“Crear un servicio en Linux”, ¿suena complicado, cierto? Podemos ver que de hecho es bastante simple y directo.
Lo más importante es entender el funcionamiento y el potencial. Al ejecutar cada comando uno mismo, leer los archivos man de los comandos, hacer al menos una configuración de inicio a fin, podemos imaginarnos diferentes casos de uso y el potencial que tienen estas herramientas para aplicarlas en distintos escenarios personales y laborales.
🐧 Te aliento a probar tus propios scripts, romper, corregir, leer…seguir aprendiendo y compartir!
Hasta el siguiente post! 🐧