Estoy usando MCEBuddy 2.5.7 Premium aquí. Tengo configurado MCEBuddy para escanear un recurso compartido de archivos SMB1 en un servidor de archivos Windows separado en busca de archivos para convertir. (Sí, sé que SMB1 es inseguro, pero no puedo cambiarlo ahora mismo.) Escanear un árbol de directorios grande a través de SMB1 no es rápido, y mis escaneos a menudo tardaban unos 10 minutos. Con el período de sondeo predeterminado de 5 minutos, el tráfico de escaneo era constante y generaba mucho tráfico de red innecesario y actividad de disco/CPU. En lugar de simplemente aumentar el intervalo de escaneo, preparé un par de scripts para hacer esto más eficiente.
Ahora tengo un script ejecutándose en el servidor de archivos Windows que monitorea los directorios en cuestión usando la API de servicios de directorio Win32. Dado que es por eventos en lugar de sondeo, mi script nunca tiene que sondear para ver si los archivos han cambiado; en su lugar, el SO le informa inmediatamente a mi script cuando eso sucede. Si algo cambia en el árbol, mi script coloca un archivo marcador en el recurso compartido. (También emplea algo de histéresis para tratar múltiples cambios consecutivos como un solo cambio y esperar una cantidad razonable de tiempo hasta que dejen de producirse cambios.) Un segundo script en la máquina MCEBuddy sondea cada 60 segundos la existencia de ese archivo marcador. Si existe, borra el marcador e inicia un reescaneo en MCEBuddy ejecutando “MCEBuddy.UserCLI.exe --command=engine --action=rescan”. El período de sondeo real de MCEBuddy está configurado a 1 semana (604800 segundos) para atrapar cualquier cosa que el script pueda haber pasado por alto por cualquier razón. Esto resuelve mi problema de rendimiento original, porque en lugar de escanear miles de archivos sin parar sobre SMB1, la máquina MCEBuddy solo hace un “if exist” en un solo archivo, y luego MCEBuddy hace un escaneo completo solo cuando necesita hacerlo.
Pero hay un pequeño problema causado por la forma en que MCEBuddy maneja “MCEBuddy.UserCLI.exe --command=engine --action=rescan” si ya hay un escaneo en curso.
Lo que espero que haga MCEBuddy:
- Abortar y reiniciar el escaneo actual desde el principio.
- O -
- Encolar (hasta 1) solicitud de reescaneo hasta que termine el escaneo actual, y luego escanear de nuevo.
Lo que MCEBuddy realmente hace:
Acepta pero ignora la solicitud de reescaneo, y devuelve éxito:
MCEBuddy.UserCLI trying to connect to Engine localhost on Port 23332
MCEBuddy.UserCLI successfully connected to MCEBuddy engine
MCEBuddy.UserCLI processing command engine
MCEBuddy.UserCLI rescanning monitor locations and logs
MCEBuddy.UserCLI Successful!!
Esto está causando que se pierdan cambios, si ocurre un cambio mientras MCEBuddy ya está escaneando.
La clave aquí es que podría solucionar fácilmente esto si tuviera alguna visión programática de si MCEBuddy está ejecutando un escaneo… pero no la tengo. Si cambiara cualquiera de varias pequeñas cosas, podría lidiar con esto:
- Si MCEBuddy mostrara uno de los comportamientos sugeridos arriba (solución preferida), no tendría que hacer nada más.
- Si MCEBuddy.UserCLI.exe devolviera fallo en lugar de éxito, mi script podría intentar el reescaneo de nuevo más tarde.
- Si MCEBuddy.UserCLI.exe tuviera una forma de consultar al motor para ver si está escaneando actualmente, mi script podría hacer esto primero, y si ya está escaneando, intentar de nuevo más tarde.
- Si el Servicio MCEBuddy colocara un archivo temporal o valor de registro que indique que un escaneo está en curso, mi script podría comprobar esto primero, y si existe el archivo/valor de registro, intentar de nuevo más tarde.
- Si el Servicio MCEBuddy incluso escribiera una entrada de registro a nivel de depuración indicando cuándo comienza y termina un escaneo, mi script podría rastrear continuamente el registro y buscar esas entradas para mantener un seguimiento del estado de MCEBuddy. Esto sería terriblemente ineficiente, pero aún así órdenes de magnitud más eficiente que escanear todos los archivos de video constantemente.
A menos que me haya perdido algo, espero tener que presentar una solicitud de función para que cambie uno de estos comportamientos en MCEBuddy. Pero pensé en preguntar primero a la multitud por cualquier otra idea.
Amo MCEBuddy y solo quiero usarlo bien. ¡Gracias por escuchar las historias de un loco!