Daemons and Services/es: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Daemons and Services/es
| Old | New | Line | |
|---|---|---|---|
| 1 | + | # ¿Qué son demonios, servicios y agentes? | |
| 2 | + | ||
| 3 | + | Las diferentes denominaciones varían segun el sistema operativo, recibiendo el nombre de demonios (*daemons*) en sistemas Unix, servicios (*services*) en sistemas Windows y agentes (*agents*) para macOS. El concepto es que son programas que se ejecutan sin interacción del usuario, incluso sin que este se valide. Aunque su nomenclatura difiere su función viene a ser similar: por ejemplo, los servidores **www** o **ftp** se llaman demonios bajo Linux y servicios bajo Windows. Debido a que no interactúan con el usuario directamente cierran sus descriptores stdin (entrada estandar), su stdout (salida estandar) y stderr (estandar error) a su inicio. | |
| 4 | + | ||
| 5 | + | Con FreePascal/Lazarus se pueden escribir estos demonios/servicios que son independientes de la plataforma mediante el uso del paquete lazdaemon. Para evitar conflictos de nombres con los componentes de Delphi estas clases se han denominado 'daemons'. | |
| 6 | + | ||
| 7 | + | # Instalación de LazDaemon | |
| 8 | + | ||
| 9 | + | Antes de comenzar a gestionarlos dentro de Lazarus es necesario instalar el paquete LazDaemon. Bien sea vía Componentes/Configurar paquetes instalados o bien abriendo/instalando el fichero .lpk directamente que se encuentra en la ubicación: lazarus/components/daemon/lazdaemon.lpk. | |
| 10 | + | ||
| 11 | + | Este paquete instala algunos componentes nuevos y un menú de elementos en el IDE. | |
| 12 | + | ||
| 13 | + | <figure> | |
| 14 | + | <img src="AplicacionDenonioServicio_es_ES.png" title="AplicacionDenonioServicio_es_ES.png" width="627" /> | |
| 15 | + | <figcaption>AplicacionDenonioServicio_es_ES.png</figcaption> | |
| 16 | + | </figure> | |
| 17 | + | ||
| 18 | + | # Classes | |
| 19 | + | ||
| 20 | + | ## TCustomDaemon | |
| 21 | + | ||
| 22 | + | TCustomDaemon es un descendiente de TDataModule que realiza todo el trabajo. Puede haber varias clases TCustomDaemons classes y/o instancias corriendo al mismo tiempo y en el el mismo proceso (multi hebra o hilo (threaded)). | |
| 23 | + | ||
| 24 | + | ## TCustomDaemonApplication | |
| 25 | + | ||
| 26 | + | TCustomDaemonApplication es un descendiente de TCustomApplication que crea TCustomDaemons. No necesita cambios. Corre bajo Windows hasta que recibe la llamada de Stop o bajo Linux hasta que recibe la señal TERM (Term Signal). | |
| 27 | + | ||
| 28 | + | ## TDaemonMapper | |
| 29 | + | ||
| 30 | + | Este componente maneja el registro de servicio. Cada instancia necesita una entrada en la propiedad **DaemonDefs**. | |
| 31 | + | ||
| 32 | + | # Demonios - Paso a Paso | |
| 33 | + | ||
| 34 | + | - Cuando el demonio arranca se analizan sintácticamente los parámetros de la línea de mandatos. Los siguientes están predefinidos: | |
| 35 | + | - -i --install: registra el demonio. No tiene efecto bajo unix. | |
| 36 | + | - -u --uninstall: elimina el registro del demonio. No tiene efecto bajo unix. | |
| 37 | + | - -r --run: arranca el demonio (daemon). Windows realiza esto normalmente por si mismo. | |
| 38 | + | - Crear el TDaemonMapper | |
| 39 | + | - Crear un TCustomDaemon por cada entrada de *DaemonDefs*. | |
| 40 | + | - instala(install), uninstall(desinstala) o arranca cada instancia. | |
| 41 | + | - if run: arranca cada instancia en cada propia hebra (hilo o thread) y espera la señal de Stop(Windows) o Term (Linux/Unix). | |
| 42 | + | ||
| 43 | + | # Métodos del demonio | |
| 44 | + | ||
| 45 | + | - **Start:** Llamado para arrancar (start) el demonio. Este método debe retornar inmediatamente *True*. | |
| 46 | + | ||
| 47 | + | - **Stop:** LLamado para detener (stop) el demonio. Este método debe retornar inmediatamente *True*. | |
| 48 | + | ||
| 49 | + | - **Shutdown:** Llamado para matar (kill) el demonio. Este método debe parar el demonio inmediatamente y retornar inmediatamente *True*. | |
| 50 | + | ||
| 51 | + | No se dispara bajo Linux. Linux simplemente mata el demonio. | |
| 52 | + | ||
| 53 | + | - **Pause:** Llamado para pausar el demonio. Este método debe retornar inmediatamente *True*. | |
| 54 | + | ||
| 55 | + | No se dispara bajo Linux porque el núcleo (kernel) detiene completamente el demonio en STOP y lo continúa con CONT. | |
| 56 | + | ||
| 57 | + | - **Continue:** Llamado cuando el demonio debe continuar tras una pausa. Este método debe retornar inmediatamente *True*. | |
| 58 | + | ||
| 59 | + | No se dispara bajo Linux. | |
| 60 | + | ||
| 61 | + | - **Install:** Llamado cuando se registra un demonio como servicio de Windows. Este método debe retornar*True* si el registro es completado correctamente. | |
| 62 | + | ||
| 63 | + | - **Uninstall:** Llamado cuando un demonio es eliminado del registro como servicio de Wndows. Este método debe retorna *True* si la eliminación del | |
| 64 | + | ||
| 65 | + | registro se completa correctamente. | |
| 66 | + | ||
| 67 | + | - **AfterUnInstall:** Llamado despues de que el demonio es quitado del registro como servicio de Windows. Este método debe retornar *True* si dicha llamada es satisfactoria. | |
| 68 | + | ||
| 69 | + | - **HandleCustomCode:** Llamado cuando se envía una señal especial al demonio. Este método retorna *True* si el resultado es satisfactorio. | |
| 70 | + | ||
| 71 | + | ## Aclaraciones antes de comenzar | |
| 72 | + | ||
| 73 | + | Antes de que puedas crear una aplicación en la modalidad de Servicio o Demonio es preciso asegurarse de que el paquete "lazdaemon" de encuentra instalado en Lazarus. | |
| 74 | + | ||
| 75 | + | # Ejemplo | |
| 76 | + | ||
| 77 | + | Puedes encontrar un ejemplo simple de todo esto en el directorio examples/cleandir/ de la instalación de Lazarus. Lee el fichero README.txt que se encuentra allí. | |
| 78 | + | ||
| 79 | + | # Service Installation | |
| 80 | + | ||
| 81 | + | ## Windows | |
| 82 | + | ||
| 83 | + | Un servicio se instala ejecutando el proceso con el parámetro **install**. A continuación Windows Services Manager realizará el resto. A través del Service Manager se puede configurar tanto el servicio como sus opciones. | |
| 84 | + | ||
| 85 | + | Ver también: [[ServiceManager]] | |
| 86 | + | ||
| 87 | + | ## Linux (Debian en sus versiones antiguas y Devuan) | |
| 88 | + | ||
| 89 | + | Descarga. configura y "Salva como" - el script de ejemplo en [Script de Servicios](http://aurawin.com/lazarus/debian-service.sh). | |
| 90 | + | ||
| 91 | + | - SVC_ALIAS es la descripción larga de la aplicación. | |
| 92 | + | - SVC_FILENAME es el nombre actual de fichero de la aplicación de servicio compilada. | |
| 93 | + | - SVC_DIR es la ubicación de la aplicación de servicio que utilicemos. | |
| 94 | + | - SVC_SERVICE_SCRIPT es el nombre final de service.sh cuando se "Salva como" del script personalizado de debian-service.sh. | |
| 95 | + | ||
| 96 | + | Sitúa tu propio script en la carpeta /etc/init.d/ | |
| 97 | + | ||
| 98 | + | Comienza el servicio ejecutando "sudo service trayectoria_completa_y_nombre_de_fichero start" | |
| 99 | + | ||
| 100 | + | Para que se auto ejecute el servicio al iniciar el sistema puedes probar a ubicarlo en update-rc.d o de otro modo puede que necesites una utilidad de terceros para lograrlo. | |
| 101 | + | ||
| 102 | + | Opción 1: | |
| 103 | + | ||
| 104 | + | ``` pascal | |
| 105 | + | sudo update-rc.d Nombre_de_tu_Script defaults | |
| 106 | + | ``` | |
| 107 | + | ||
| 108 | + | Opción 2: | |
| 109 | + | ||
| 110 | + | ``` pascal | |
| 111 | + | sudo apt-get install chkconfig | |
| 112 | + | sudo chkconfig --add Nombre_de_tu_Script | |
| 113 | + | sudo chkconfig --level 2345 Nombre_de_tu_Script on | |
| 114 | + | ``` | |
| 115 | + | ||
| 116 | + | ## Linux | |
| 117 | + | ||
| 118 | + | Actualmente, las diversas distribuciones de Linux (como Fedora, Debian, SLES12) están tendiendo a abandonar la diversidad de formas de lanzar los demonios, tratando de utilizar un modelo unificado de servicios. Otras (como Devuan y sus derivados) sin embargo defienden la libertad de escoger entre el sistema clásico o el moderno systemd, por tanto hay variedad para los diferentes gustos. | |
| 119 | + | ||
| 120 | + | En versiones recientes de Fedora utiliza [systemd](https://es.wikipedia.org/wiki/Systemd) con start/stop services que son los mismos que utiliza Debian. | |
| 121 | + | ||
| 122 | + | - Desde el prompt de la línea de mandatos ejecutar **sudo gedit** o cualquier otro editor simple disponible. | |
| 123 | + | - Copia y pega lo siguiente: | |
| 124 | + | ||
| 125 | + | ``` ini | |
| 126 | + | [Unit] | |
| 127 | + | Description=Descripción larga de la aplicación | |
| 128 | + | After=network.target | |
| 129 | + | ||
| 130 | + | [Service] | |
| 131 | + | Type=simple | |
| 132 | + | ExecStart=trayecto_completo_y_nombre_de_fichero -r | |
| 133 | + | RemainAfterExit=yes | |
| 134 | + | TimeoutSec=25 | |
| 135 | + | ||
| 136 | + | [Install] | |
| 137 | + | WantedBy=multi-user.target | |
| 138 | + | ``` | |
| 139 | + | ||
| 140 | + | - Edita los siguiente valores. | |
| 141 | + | - Descripción - Descripción larga de los servicios de la aplicación. | |
| 142 | + | - ExecStart - trayecto_completo_y_nombre_de_fichero es el nombre de la aplicación de servicios compilada con su trayecto completo. | |
| 143 | + | ||
| 144 | + | - Salvar como diálogo | |
| 145 | + | - Navegar hasta /lib/systemd/system/ | |
| 146 | + | - Nombrar el fichero igual que nombre_del_servicio.service | |
| 147 | + | ||
| 148 | + | Hay un ejemplo de configuración de systemd en [Service](http://aurawin.com/lazarus/fedora.service) | |
| 149 | + | ||
| 150 | + | ## Software de ejemplo | |
| 151 | + | ||
| 152 | + | Listado de software práctico que nos permite examinar su código: | |
| 153 | + | ||
| 154 | + | - **LazWinServiceMgr:** <https://sourceforge.net/projects/lazwinservicemgr/?source=directory> | |
| 155 | + | - **LazProcessKiller:** <https://sourceforge.net/projects/lazprocesskiller/> | |
| 156 | + | ||
| 157 | + | # Ver también | |
| 158 | + | ||
| 159 | + | - [[ServiceManager]] Ejemplo de unidad FreePascal para gestión se servicios Windows. | |
| 160 | + | - [[Office Automation]] | |
| 161 | + | - [Taming the daemon: PDF by Michaël Van Canneyt](http://www.turbog.com/wp-content/uploads/2012/04/daemons.pdf): Resultaría interesante conseguir el permiso del autor para traducir este documento al español. | |
| 162 | + | - [Useful discussion with small working daemon application](http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303) | |
| 163 | + | ||
| 164 | + | --- | |
| 165 | + | *From the Free Pascal wiki, page "Daemons and Services/es", as it stood on 2022-01-09 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
