No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
23 Hrs
18 Min
50 Seg

Creación y manejo de demonios

28/30
Recursos

Aportes 20

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Creación y manejo de demonios

Es un proceso de Linux que da un comportamiento de servicio a un programa: es decir, que se ejecuta en segundo plano sin la interacción de un usuario.

  • systemd : crea los demonios
  • systemctl: gestiona los demonios

Para crear un demonio primero debes:

  • Crear el script o unit file que usará de base tu demonio, esto puedes hacerlo con Python u otro lenguaje de scripting.

  • Es importante crear el folder donde se alojará el unit file a nivel de root, de esta manera estará disponible para todos los usuarios.

  • Crear la carpeta en donde alojaremos la información generada por nuestro unit file.

  • ir a /etc/systemd/system y crear el script que beberá del primero para poder correr el demonio.

  • reiniciamos los demonios con:

     systemctl daemons-reload
    
  • Habilitamos con:

     systemctl enable loggerpython.service
    
  • Activamos con:

     systemctl start loggerpython.service
    

mi aporte en ruby guardandolo en un archivo llamado poem

class File
  def self.my_open(filename, mode)
    file = self.new(filename, mode)
    return file unless block_given?
    begin
      yield file
    rescue Exception => e
      p e.message
    ensure
      file.close
    end
  end
end

File.my_open("poem.txt", "w") do |f|
  f.puts "Hello world"
  while true
   sleep(1)
   f.puts Time.now
  end
end

Intento con bash

#!/bin/bash
#
# datetime logger
#
# Usage:
# - First make it executable by running chmod +x ./logger.sh
# - Then run it with ./logger.sh
#
# If run from the right location (/scripts) and with the right privileges (root) it shouldn't produce errors but you can always redirect the stderr to a file or to /dev/null if you need to.
# that would be ./logger.sh 2> error.log or ./logger.sh 2>/dev/null

while true; do
        echo "Timestamp: $(date '+%Y-%m-%d %H:%M:%S')" >> /datelogs/timestamp.txt
        sleep 1
done

Esto ya lo había hecho en la universidad :0 pero no sabía que se llamaban “unit files” solo les conocia como scripts de arranque

IMPLEMENTACIÓN DE UN ARCHIVO DE UNIDAD DE SERVICIO (DAEMON)
.
La implementación de un archivo de unidad de servicio en systemd implica seguir una sintaxis específica y definir varias opciones de configuración. Aquí hay un ejemplo básico de cómo sería la implementación de un archivo de unidad de servicio:
.

  1. Abre un editor de texto y crea un nuevo archivo con una extensión .service. Por ejemplo, puedes usar el comando sudo nano /etc/systemd/system/mi_servicio.service para crear y abrir el archivo con el editor de texto nano (asegúrate de tener privilegios de superusuario para realizar esta operación).
    .
  2. En el archivo, define las siguientes secciones y opciones de configuración:
[Unit]
Description=Descripción de mi servicio
After=network.target   # Dependencias, si es necesario

[Service]
ExecStart=/ruta/al/comando-de-inicio   # Comando para iniciar el servicio
ExecStop=/ruta/al/comando-de-detencion   # Comando para detener el servicio, si es necesario
Restart=always   # Opciones de reinicio, si es necesario
User=nombre_de_usuario   # Usuario bajo el cual se ejecuta el servicio
Group=nombre_de_grupo   # Grupo asociado al servicio
WorkingDirectory=/ruta/al/directorio/de/trabajo   # Directorio de trabajo del servicio, si es necesario

[Install]
WantedBy=multi-user.target   # Objetivo en el que se habilitará el servicio

Reemplaza /ruta/al/comando-de-inicio con la ruta absoluta del comando que se utilizará para iniciar el servicio. Puede ser un script, un binario o cualquier otro comando necesario para iniciar tu servicio.
.
Opcionalmente, reemplaza /ruta/al/comando-de-detencion con la ruta absoluta del comando que se utilizará para detener el servicio, si es necesario. Si no se especifica, systemd intentará detener el servicio enviando una señal SIGTERM al proceso principal.
.
Opcionalmente, ajusta las otras opciones de configuración según las necesidades de tu servicio.
.
Guarda y cierra el archivo.
.
Ejecuta el comando sudo systemctl daemon-reload para que systemd reconozca el nuevo archivo de unidad de servicio.
.
Para iniciar el servicio, usa el comando sudo systemctl start mi_servicio (reemplaza mi_servicio con el nombre del archivo de unidad de servicio sin la extensión .service).
.
Para detener el servicio, usa el comando sudo systemctl stop mi_servicio.

Para habilitar que el servicio se inicie automáticamente en el arranque del sistema, usa el comando sudo systemctl enable mi_servicio.
.
Con estos pasos, has implementado un archivo de unidad de servicio básico en systemd. Recuerda que puedes ajustar y personalizar las opciones de configuración según las necesidades específicas de tu servicio.
.
Fuente:ChatGPT.

si dice que el directorio no existe pongan solo dos puntos a la ruta, recuerden que python aveces o dependiendo su configuracion siempre hace referencia desde el punto donde esta y no desde el /home

import time
from datetime import datetime


while True:
    with open("../datelogs/tiempoAhora.txt","a") as file:
        file.write("\ntiempo ahora: {}".format(datetime.now()))
        file.close()
    time.sleep(1)

Código transformado a TypeScript y con comentarios agregados

import * as fs from 'fs';
import * as path from 'path';
import { promisify } from 'util';

const sleep = promisify(setTimeout);

async function writeTimestamp(): Promise<void> {
  const filePath = '/datelogs/timestamp.txt';

  while (true) {
    // Open the file in append mode
    const fileHandle = await fs.promises.open(filePath, 'a');
    
    try {
      // Get the current timestamp
      const timestamp = new Date().toISOString();
      
      // Append the timestamp to the file
      await fileHandle.appendFile(`\nTimestamp: ${timestamp}`);
    } finally {
      // Close the file handle
      await fileHandle.close();
    }
    
    // Wait for 1 second
    await sleep(1000);
  }
}

writeTimestamp().catch(console.error);

* Automatización de Tareas del Sistema: Los demonios permiten automatizar tareas esenciales como la limpieza de archivos temporales la programación de copias de seguridad y la sincronización de datos lo que ayuda a mantener el sistema operativo funcionando de manera eficiente sin intervención manual constante * Gestión de Servicios Críticos: Demonios como `sshd` para acceso remoto y `httpd` para servidores web gestionan servicios críticos que deben estar siempre disponibles y operativos garantizando que los usuarios y aplicaciones puedan acceder a los recursos necesarios en todo momento * Monitoreo y Seguridad del Sistema: Demonios como `auditd` y `fail2ban` monitorizan el sistema en busca de actividades sospechosas y eventos de seguridad permitiendo la detección y respuesta a posibles amenazas de manera proactiva * Manejo de Comunicaciones y Redes: Demonios como `network-manager` y `dnsmasq` gestionan las configuraciones de red y las comunicaciones en el sistema facilitando la conectividad y la gestión de redes de manera eficiente * Gestión de Recursos del Sistema: Demonios como `cron` y `systemd` gestionan la programación de tareas y la inicialización de servicios del sistema ayudando a optimizar el uso de recursos y a mantener un rendimiento estable
Para la lectura de la cantidad de archivos generados por el script, se utiliza el wordcount --> wc - l (para que cuente cada linea que se va generando). Ademas, para detener el script se realiza con las teclas "CTRL" + Z.
Muy buena clase, tenia conocimiento del systemctl pero no de como crear demonios. Gracias Enrique.
**¿QUÉ SON LOS DEMONIOS?** * **Definición:** Los demonios son procesos que se ejecutan en segundo plano, proporcionando servicios. * **Funcionalidad:** Permiten que scripts o aplicaciones se ejecuten de manera continua. * **Ejemplo:** Un script en Python que registre la fecha y hora en un archivo cada segundo. **CREACIÓN DE DEMONIOS: UNIT FILES** Para crear y gestionar demonios, utilizamos archivos llamados unit files. En esta clase, aprenderemos a crear, editar y entender la utilidad de estos archivos directamente desde la terminal. **SYSTEMD Y SYSTEMCTL** * **Systemd:** Es el primer demonio que se ejecuta en Linux y se encarga de iniciar y gestionar otros servicios del sistema. * **Systemctl:** Es la herramienta que utilizamos para controlar systemd. Nos permite iniciar, detener y verificar el estado de los demonios. **GESTIÓN DEL DEMONIO CON SYSTEMCTL** 1\. Recargar Systemd: systemctl daemon-reload 2\. Verificar el Estado del Servicio: systemctl status loggerpython.service 3\. Iniciar el Servicio: systemctl start loggerpython.service 4\. Habilitar el Servicio en el Inicio del Sistema: systemctl enable loggerpython.service 5\. Detener el Servicio: systemctl stop loggerpython.service 6\. Deshabilitar el Servicio: systemctl disable loggerpython.service **VERIFICACIÓN DEL FUNCIONAMIENTO** * Consultar el Log: cat /root/datelogs/timestamp.txt * Contar Líneas del Log: wc -l /root/datelogs/timestamp.txt
Les adjunto mis apuntes en notion: <https://www.notion.so/Creaci-n-y-manejo-de-demonios-3e5425abeb6e46a1aabc894fef21e057?pvs=4>
Que bonito <3 ![](https://static.platzi.com/media/user_upload/image-85164a15-cc35-44ee-ac0e-fc2008cd39e0.jpg)
El manejo de systemctl es muy utilizado cuando creas tu servidor apache para utilizarlo con PHP, debes realizar esos pasos y es muy interesante. Les recomiendo instalar PHP en Linux y vean cada paso para validar esos procesos
En Linux, un “unit file” es un archivo de configuración utilizado por systemd, el sistema init y administrador de servicios. Estos archivos definen cómo systemd debe manejar un recurso del sistema12. Características de los unit files: Definen servicios: Los unit files más comunes son los que terminan en .service, que definen cómo iniciar, detener y administrar servicios. Ubicación: Se encuentran en /etc/systemd/system/ o /lib/systemd/system/ y pueden ser creados y editados por el usuario o proporcionados por paquetes instalados. Formato: Son archivos de texto que utilizan una sintaxis específica para definir la configuración del servicio o recurso. Tipos de unidades: Además de servicios, pueden definir otros tipos de recursos como dispositivos, puntos de montaje, trabajos cron, sockets y más. Ejemplo de un unit file para un servicio: \[Unit] Description=Mi Servicio Personalizado After=network.target \[Service] ExecStart=/usr/bin/mi\_servicio User=mi\_usuario Restart=on-failure \[Install] WantedBy=multi-user.target Este es un ejemplo básico de cómo se ve un unit file para un servicio. Define cuándo se debe iniciar el servicio (After), qué comando ejecutar (ExecStart), bajo qué usuario (User), y qué hacer si falla (Restart). También especifica que el servicio debe iniciarse con el nivel de ejecución multi-user.target2. Los unit files son fundamentales para el funcionamiento de systemd, ya que le permiten gestionar los servicios y otros recursos del sistema de manera eficiente y modular.
![](https://static.platzi.com/media/user_upload/image-69c676f1-b469-41e7-8332-c8d949487f3a.jpg)![](https://static.platzi.com/media/user_upload/image-4327920a-3c0a-4eb4-bc4c-9f588b10b520.jpg)

Vemos estado con:

<systemctl status loggerpython.service> 

Habilitamos con:

<systemctl enable loggerpython.service> 

Activamos con:

< systemctl start loggerpython.service> 

Detenemos con

< systemctl stop loggerpython.service> 

Desahabilitamos con

< systemctl disable loggerpython.service> 

Estoy impresionado con lo que pueden hacer los demonios y como son creados a ser ejecutados sin ningun problema. Aprendi mucho de crearlos y manejarlos. Esta fue una gra clase que no olvidare. A seguir

UNIT FILES


Los “unit files” son archivos de configuración utilizados por systemd, el administrador de sistema y servicios en los sistemas operativos Linux. Estos archivos definen cómo systemd administra y controla varios servicios del sistema, objetivos, dispositivos, sockets y otras unidades. Por lo general, se almacenan en el directorio /etc/systemd/system/ o en directorios dentro de /lib/systemd/system/.
_
Existen varios tipos de archivos de unidades, cada uno con un propósito específico:

Archivos de unidad de servicio (*.service): Estos archivos definen servicios del sistema, que son procesos en ejecución continua. Especifican los comandos para iniciar, detener y administrar el servicio. Las unidades de servicio también pueden definir dependencias con otras unidades.
_
Archivos de unidad de objetivo (*.target): Las unidades de objetivo representan grupos de servicios que deben iniciarse o detenerse juntos. Actúan como puntos de sincronización para iniciar o detener varios servicios simultáneamente.
_
Archivos de unidad de socket (*.socket): Las unidades de socket definen sockets de comunicación entre procesos (IPC). Especifican el tipo de socket, la dirección de escucha y otros parámetros.
_
Archivos de unidad de dispositivo (*.device): Las unidades de dispositivo representan dispositivos del kernel, como dispositivos de hardware o dispositivos virtuales. Permiten que systemd administre operaciones específicas del dispositivo, como la creación de nodos de dispositivo o la carga de módulos.
_
Archivos de unidad de montaje (*.mount): Las unidades de montaje controlan el montaje y desmontaje de sistemas de archivos. Especifican el punto de montaje, el tipo de sistema de archivos y las opciones.
_
Archivos de unidad de temporizador (*.timer): Las unidades de temporizador definen temporizadores que activan la ejecución de otras unidades en intervalos específicos o en momentos específicos.

Estos son algunos de los tipos de archivos de unidad comúnmente utilizados en systemd. Cada archivo de unidad sigue una sintaxis específica e incluye varias opciones de configuración específicas de su tipo. Al crear o modificar estos archivos de unidad, los administradores del sistema pueden controlar cómo systemd administra e inicia varios componentes del sistema.

Fuente: ChatGPT.