1. [Errno 98] error while attempting to bind on address ('192.168.28.16', 5000): address already in use
Que sudede al ejecutar softprop/menus/mnu_main.py en la máquina remota
Para ver que procesos se estan ejecutando en el port 5000 ejecutamos:
lsof -i :5000
Y nos da el proceso:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xmopenres 97139 informatica 13u IPv4 741536 0t0 TCP SRV-osTicket-CAU:5000 (LISTEN)
kill -9 id_del_proceso
2. Uvicorn solo corre con 1 worker. No deja ejecutar otro uvicorn cuando está ocupado ejecutando un proceso largo como el de captura de decretos.
Veamos cual es el origen de los problemas que es la ejecución de uvicorn desde python con estaq sentencia:
# ─── Main Entrypoint ────────────────────────────────────────────────── if __name__ == "__main__": cert_path = get_project_folder() + "/static/certs/wildcard.tavernes.es." uvicorn.run( app, host=my_host, port=my_port, workers= 4, ssl_keyfile=cert_path + "key", ssl_certfile=cert_path + "crt", )
aunque le hayamos indicado "workers = 4", el "uvicorn.run(" solo ejecuta un worker que és el del proceso python.
Para ello, en vez de ejecutar el módulo mnu_main.py que tiene su shebang (que apunta al entorno virtual), hay que ejecutar uvicorn desde sistema operativo
/home/informatica/eduApps/softprop/venv_softprop/bin/uvicorn softprop.menus.mnu_main:app \ --host proves.tavernes.es \ --port 5000 \ --workers 4 \ --ssl-keyfile /home/informatica/eduApps/softprop/static/certs/wildcard.municipio.es.key \ --ssl-certfile /home/informatica/eduApps/softprop/static/certs/wildcard.municipio.es.crt
La parte de azul es la llamada al uvicorn que está en el entorno virtual
La parte marrón es el nombre del módulo que contiene el objeto fasthtml.app. Se hace referencia a este módulo python para que se tengan en cuenta todas las definiciones y referencias contempladas en este módulo python
La parte roja indica el objeto fasthtml.app a ejecutar en uvicorn. Este objeto está definido dentro del módulo python marrón
Como se ve, ahora sique coje el parámetro "workers=4
Y para el caso que sea un servicio, se define este fichero python_menus_mnu_main.service que se guardará en /etc/systemd/system :
[Unit] Description=Softprop Menu Main Python Service After=network.target [Service] # Usuario y grupo que ejecutarán el servicio User=informatica Group=informatica # Directorio de trabajo base WorkingDirectory=/home/informatica/eduApps # Activar entorno virtual Environment="PATH=/home/informatica/eduApps/softprop/venv_softprop/bin" # Ejecutar directamente el script (usa el shebang) SOLO USA UN WORKER #ExecStart=/home/informatica/eduApps/softprop/menus/mnu_main.py # Ejecutar uvicorn directamente (importa el módulo mnu_main:app) ExecStart=/home/informatica/eduApps/softprop/venv_softprop/bin/uvicorn softprop.menus.mnu_main:app \ --host proves.tavernes.es \ --port 5000 \ --workers 4 \ --ssl-keyfile /home/informatica/eduApps/softprop/static/certs/wildcard.municipio.es.key \ --ssl-certfile /home/informatica/eduApps/softprop/static/certs/wildcard.municipio.es.crt # Reinicio automático en caso de error Restart=always RestartSec=5 # Redirección de logs StandardOutput=append:/var/log/softprop_menus_menu_main.log StandardError=append:/var/log/softprop_menus_mnu_main.err [Install] WantedBy=multi-user.target
No hay comentarios :
Publicar un comentario