No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Creaci贸n y manejo de demonios

28/30
Recursos

Aportes 15

Preguntas 2

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
    

Yo despu茅s de aprender a crear y manejar demonios:

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 鈥渦nit 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);

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 鈥渦nit 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 鈥渦nit 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.