Sign in Join
Wiki copytemporary

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

OldNewLine
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).*

Back to history