Sign in Join
Wiki copytemporary

Daemons and Services/es: what changed

Revision 1 to 2. 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-<figure>
1413<img src="AplicacionDenonioServicio_es_ES.png" title="AplicacionDenonioServicio_es_ES.png" width="627" />
15-<figcaption>AplicacionDenonioServicio_es_ES.png</figcaption>
16-</figure>
1714
1815# Classes
1916
2017## TCustomDaemon
2118
2219TCustomDaemon 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)).
2320
2421## TCustomDaemonApplication
2522
2623TCustomDaemonApplication 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).
2724
2825## TDaemonMapper
2926
3027Este componente maneja el registro de servicio. Cada instancia necesita una entrada en la propiedad **DaemonDefs**.
3128
3229# Demonios - Paso a Paso
3330
3431- Cuando el demonio arranca se analizan sintácticamente los parámetros de la línea de mandatos. Los siguientes están predefinidos:
3532 - -i --install: registra el demonio. No tiene efecto bajo unix.
3633 - -u --uninstall: elimina el registro del demonio. No tiene efecto bajo unix.
3734 - -r --run: arranca el demonio (daemon). Windows realiza esto normalmente por si mismo.
3835- Crear el TDaemonMapper
3936- Crear un TCustomDaemon por cada entrada de *DaemonDefs*.
4037- instala(install), uninstall(desinstala) o arranca cada instancia.
4138- if run: arranca cada instancia en cada propia hebra (hilo o thread) y espera la señal de Stop(Windows) o Term (Linux/Unix).
4239
4340# Métodos del demonio
4441
4542- **Start:** Llamado para arrancar (start) el demonio. Este método debe retornar inmediatamente *True*.
4643
4744- **Stop:** LLamado para detener (stop) el demonio. Este método debe retornar inmediatamente *True*.
4845
4946- **Shutdown:** Llamado para matar (kill) el demonio. Este método debe parar el demonio inmediatamente y retornar inmediatamente *True*.
5047
5148No se dispara bajo Linux. Linux simplemente mata el demonio.
5249
5350- **Pause:** Llamado para pausar el demonio. Este método debe retornar inmediatamente *True*.
5451
5552No se dispara bajo Linux porque el núcleo (kernel) detiene completamente el demonio en STOP y lo continúa con CONT.
5653
5754- **Continue:** Llamado cuando el demonio debe continuar tras una pausa. Este método debe retornar inmediatamente *True*.
5855
5956No se dispara bajo Linux.
6057
6158- **Install:** Llamado cuando se registra un demonio como servicio de Windows. Este método debe retornar*True* si el registro es completado correctamente.
6259
6360- **Uninstall:** Llamado cuando un demonio es eliminado del registro como servicio de Wndows. Este método debe retorna *True* si la eliminación del
6461
6562registro se completa correctamente.
6663
6764- **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.
6865
6966- **HandleCustomCode:** Llamado cuando se envía una señal especial al demonio. Este método retorna *True* si el resultado es satisfactorio.
7067
7168## Aclaraciones antes de comenzar
7269
7370Antes 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.
7471
7572# Ejemplo
7673
7774Puedes 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í.
7875
7976# Service Installation
8077
8178## Windows
8279
8380Un 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.
8481
8582Ver también: [[ServiceManager]]
8683
8784## Linux (Debian en sus versiones antiguas y Devuan)
8885
8986Descarga. configura y "Salva como" - el script de ejemplo en [Script de Servicios](http://aurawin.com/lazarus/debian-service.sh).
9087
9188- SVC_ALIAS es la descripción larga de la aplicación.
9289- SVC_FILENAME es el nombre actual de fichero de la aplicación de servicio compilada.
9390- SVC_DIR es la ubicación de la aplicación de servicio que utilicemos.
9491- SVC_SERVICE_SCRIPT es el nombre final de service.sh cuando se "Salva como" del script personalizado de debian-service.sh.
9592
9693Sitúa tu propio script en la carpeta /etc/init.d/
9794
9895Comienza el servicio ejecutando "sudo service trayectoria_completa_y_nombre_de_fichero start"
9996
10097Para 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.
10198
10299Opción 1:
103100
104101``` pascal
105102sudo update-rc.d Nombre_de_tu_Script defaults
106103```
107104
108105Opción 2:
109106
110107``` pascal
111108sudo apt-get install chkconfig
112109sudo chkconfig --add Nombre_de_tu_Script
113110sudo chkconfig --level 2345 Nombre_de_tu_Script on
114111```
115112
116113## Linux
117114
118115Actualmente, 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.
119116
120117En versiones recientes de Fedora utiliza [systemd](https://es.wikipedia.org/wiki/Systemd) con start/stop services que son los mismos que utiliza Debian.
121118
122119- Desde el prompt de la línea de mandatos ejecutar **sudo gedit** o cualquier otro editor simple disponible.
123120- Copia y pega lo siguiente:
124121
125122``` ini
126123[Unit]
127124Description=Descripción larga de la aplicación
128125After=network.target
129126
130127[Service]
131128Type=simple
132129ExecStart=trayecto_completo_y_nombre_de_fichero -r
133130RemainAfterExit=yes
134131TimeoutSec=25
135132
136133[Install]
137134WantedBy=multi-user.target
138135```
139136
140137- Edita los siguiente valores.
141138 - Descripción - Descripción larga de los servicios de la aplicación.
142139 - ExecStart - trayecto_completo_y_nombre_de_fichero es el nombre de la aplicación de servicios compilada con su trayecto completo.
143140
144141- Salvar como diálogo
145142 - Navegar hasta /lib/systemd/system/
146143 - Nombrar el fichero igual que nombre_del_servicio.service
147144
148145Hay un ejemplo de configuración de systemd en [Service](http://aurawin.com/lazarus/fedora.service)
149146
150147## Software de ejemplo
151148
152149Listado de software práctico que nos permite examinar su código:
153150
154151- **LazWinServiceMgr:** <https://sourceforge.net/projects/lazwinservicemgr/?source=directory>
155152- **LazProcessKiller:** <https://sourceforge.net/projects/lazprocesskiller/>
156153
157154# Ver también
158155
159156- [[ServiceManager]] Ejemplo de unidad FreePascal para gestión se servicios Windows.
160157- [[Office Automation]]
161158- [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.
162159- [Useful discussion with small working daemon application](http://forum.lazarus.freepascal.org/index.php/topic,22983.msg152303.html#msg152303)
163160
164161---
165162*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