Sign in Join
Wiki copytemporary

Daemons and Services/es: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# ¿Qué son demonios, servicios y agentes?
22
33Las 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.
44
55Con 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'.
66
77# Instalación de LazDaemon
88
99Antes 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.
1010
1111Este paquete instala algunos componentes nuevos y un menú de elementos en el IDE.
1212
13-<img src="AplicacionDenonioServicio_es_ES.png" title="AplicacionDenonioServicio_es_ES.png" width="627" />
13+![](/wiki-images/9/90/AplicacionDenonioServicio_es_ES.png)
1414
1515# Classes
1616
1717## TCustomDaemon
1818
1919TCustomDaemon 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)).
2020
2121## TCustomDaemonApplication
2222
2323TCustomDaemonApplication 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).
2424
2525## TDaemonMapper
2626
2727Este componente maneja el registro de servicio. Cada instancia necesita una entrada en la propiedad **DaemonDefs**.
2828
2929# Demonios - Paso a Paso
3030
3131- Cuando el demonio arranca se analizan sintácticamente los parámetros de la línea de mandatos. Los siguientes están predefinidos:
3232 - -i --install: registra el demonio. No tiene efecto bajo unix.
3333 - -u --uninstall: elimina el registro del demonio. No tiene efecto bajo unix.
3434 - -r --run: arranca el demonio (daemon). Windows realiza esto normalmente por si mismo.
3535- Crear el TDaemonMapper
3636- Crear un TCustomDaemon por cada entrada de *DaemonDefs*.
3737- instala(install), uninstall(desinstala) o arranca cada instancia.
3838- if run: arranca cada instancia en cada propia hebra (hilo o thread) y espera la señal de Stop(Windows) o Term (Linux/Unix).
3939
4040# Métodos del demonio
4141
4242- **Start:** Llamado para arrancar (start) el demonio. Este método debe retornar inmediatamente *True*.
4343
4444- **Stop:** LLamado para detener (stop) el demonio. Este método debe retornar inmediatamente *True*.
4545
4646- **Shutdown:** Llamado para matar (kill) el demonio. Este método debe parar el demonio inmediatamente y retornar inmediatamente *True*.
4747
4848No se dispara bajo Linux. Linux simplemente mata el demonio.
4949
5050- **Pause:** Llamado para pausar el demonio. Este método debe retornar inmediatamente *True*.
5151
5252No se dispara bajo Linux porque el núcleo (kernel) detiene completamente el demonio en STOP y lo continúa con CONT.
5353
5454- **Continue:** Llamado cuando el demonio debe continuar tras una pausa. Este método debe retornar inmediatamente *True*.
5555
5656No se dispara bajo Linux.
5757
5858- **Install:** Llamado cuando se registra un demonio como servicio de Windows. Este método debe retornar*True* si el registro es completado correctamente.
5959
6060- **Uninstall:** Llamado cuando un demonio es eliminado del registro como servicio de Wndows. Este método debe retorna *True* si la eliminación del
6161
6262registro se completa correctamente.
6363
6464- **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.
6565
6666- **HandleCustomCode:** Llamado cuando se envía una señal especial al demonio. Este método retorna *True* si el resultado es satisfactorio.
6767
6868## Aclaraciones antes de comenzar
6969
7070Antes 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.
7171
7272# Ejemplo
7373
7474Puedes 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í.
7575
7676# Service Installation
7777
7878## Windows
7979
8080Un 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.
8181
8282Ver también: [[ServiceManager]]
8383
8484## Linux (Debian en sus versiones antiguas y Devuan)
8585
8686Descarga. configura y "Salva como" - el script de ejemplo en [Script de Servicios](http://aurawin.com/lazarus/debian-service.sh).
8787
8888- SVC_ALIAS es la descripción larga de la aplicación.
8989- SVC_FILENAME es el nombre actual de fichero de la aplicación de servicio compilada.
9090- SVC_DIR es la ubicación de la aplicación de servicio que utilicemos.
9191- SVC_SERVICE_SCRIPT es el nombre final de service.sh cuando se "Salva como" del script personalizado de debian-service.sh.
9292
9393Sitúa tu propio script en la carpeta /etc/init.d/
9494
9595Comienza el servicio ejecutando "sudo service trayectoria_completa_y_nombre_de_fichero start"
9696
9797Para 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.
9898
9999Opción 1:
100100
101101``` pascal
102102sudo update-rc.d Nombre_de_tu_Script defaults
103103```
104104
105105Opción 2:
106106
107107``` pascal
108108sudo apt-get install chkconfig
109109sudo chkconfig --add Nombre_de_tu_Script
110110sudo chkconfig --level 2345 Nombre_de_tu_Script on
111111```
112112
113113## Linux
114114
115115Actualmente, 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.
116116
117117En versiones recientes de Fedora utiliza [systemd](https://es.wikipedia.org/wiki/Systemd) con start/stop services que son los mismos que utiliza Debian.
118118
119119- Desde el prompt de la línea de mandatos ejecutar **sudo gedit** o cualquier otro editor simple disponible.
120120- Copia y pega lo siguiente:
121121
122122``` ini
123123[Unit]
124124Description=Descripción larga de la aplicación
125125After=network.target
126126
127127[Service]
128128Type=simple
129129ExecStart=trayecto_completo_y_nombre_de_fichero -r
130130RemainAfterExit=yes
131131TimeoutSec=25
132132
133133[Install]
134134WantedBy=multi-user.target
135135```
136136
137137- Edita los siguiente valores.
138138 - Descripción - Descripción larga de los servicios de la aplicación.
139139 - ExecStart - trayecto_completo_y_nombre_de_fichero es el nombre de la aplicación de servicios compilada con su trayecto completo.
140140
141141- Salvar como diálogo
142142 - Navegar hasta /lib/systemd/system/
143143 - Nombrar el fichero igual que nombre_del_servicio.service
144144
145145Hay un ejemplo de configuración de systemd en [Service](http://aurawin.com/lazarus/fedora.service)
146146
147147## Software de ejemplo
148148
149149Listado de software práctico que nos permite examinar su código:
150150
151151- **LazWinServiceMgr:** <https://sourceforge.net/projects/lazwinservicemgr/?source=directory>
152152- **LazProcessKiller:** <https://sourceforge.net/projects/lazprocesskiller/>
153153
154154# Ver también
155155
156156- [[ServiceManager]] Ejemplo de unidad FreePascal para gestión se servicios Windows.
157157- [[Office Automation]]
158158- [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.
159159- [Useful discussion with small working daemon application](http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303)
160160
161161---
162162*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