Instalar y operar el servicio de Windows¶
El servicio de sincronización corre en la PC de oficina que tiene acceso a la red del reloj. Se instala como servicio de Windows con NSSM para que arranque solo y sobreviva a reinicios.
Requisitos previos¶
- Windows con PowerShell como Administrador.
- Python 3.10+.
- Acceso a la red local donde está el ZKTeco F22 (puerto
4370). config.iniya configurado — ver Configuración y entornos.- Idealmente, una IP fija reservada por DHCP para el reloj. Sin ella, cada reinicio del F22 puede cambiarle la IP y tumbar la sincronización (reserva pendiente).
1. Preparar el entorno¶
Copia la plantilla y completa los valores:
Verifica antes de instalar el servicio:
2. Instalar el servicio¶
En PowerShell como Administrador:
El script descarga NSSM si no está presente (lo deja en tools\nssm.exe), crea
el servicio y lo inicia con arranque automático. Redirige stdout y stderr a
logs\service.log.
| Ajuste del servicio | Valor |
|---|---|
| Nombre | ZKSyncService |
| Display name | ZKTeco Sync - Asistencias a Odoo |
| Arranque | SERVICE_AUTO_START |
| Ejecutable | .venv\Scripts\python.exe |
| Logs | logs\service.log |
El nombre del servicio no coincide entre scripts
install_service.ps1 crea ZKSyncService, pero
uninstall_service.ps1 y el README.md del repo usan ZKTecoSync. Si
la desinstalación falla con "servicio no encontrado", es por esto:
confirma el nombre real con Get-Service *ZK* antes de operar.
3. Gestionar el servicio¶
Get-Service *ZK* # confirmar el nombre real
Get-Service ZKSyncService # ver estado
Start-Service ZKSyncService # iniciar
Stop-Service ZKSyncService # detener
Restart-Service ZKSyncService # reiniciar (necesario tras editar config.ini)
Ver el log en tiempo real:
Snapshot del estado:
Reiniciar tras cambiar la configuración
config.ini se lee al arrancar. Editarlo sin reiniciar el servicio no
tiene efecto.
Probar contra staging¶
sync.py no acepta --config, así que se alterna el archivo activo:
# 1. Detener produccion
Stop-Service ZKSyncService
# 2. Activar staging
Copy-Item config.staging.ini config.ini
# 3. Probar manualmente (no como servicio)
python sync.py --dry-run # ver que se enviaria
python sync.py # una corrida real contra staging
# 4. Volver a produccion
Copy-Item config.production.ini config.ini
Start-Service ZKSyncService
Para correr staging sin detener producción hace falta otra máquina (o una
segunda instancia del servicio apuntando a otro directorio con su propio
config.ini).
Desinstalar¶
Si el script no encuentra el servicio, revisa el aviso sobre el nombre y elimínalo con el nombre real: