Tiempo de espera de la función de pruebaTengo una única secuencia de comandos que llama a muchas otras secuencias de comandos para informar procesos sobre equipos e informes de construcción. A veces, los datos que provienen de las herramientas de proceso incluyen errores que JMP no puede manejar.Así que he envuelto las llamadas en una función Try() como esta:
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
A veces, el script incluido no falla, pero tampoco finaliza.
Si bien esto probablemente podría solucionarse editando el script y cómo procesa los datos, no son mis scripts para editar.
¿Hay alguna forma de que la función de prueba considere que la prueba es un error si tarda más de 1 hora, por ejemplo?
¿Hay otra manera de lograr esto? ¿Hay alguna manera de decirle al Try() que debería darse por vencido?
Gracias
secuencias de comandosRe: Tiempo de espera de la función de pruebaNo, try() no tiene un mecanismo de tiempo de espera; es muy similar al mecanismo try-throw-catch de C++. Como está adivinando, necesitaría poner la lógica en cada uno de los scripts incluidos, lo que podría hacer algo como
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
Sé que dijiste que no puedes abrir esos scripts para editarlos, pero si lo hiciste, es posible que desees que realicen una devolución de llamada a tu código para indicar el progreso. Entonces podría hacer el lanzamiento desde la devolución de llamada si es necesario. De cualquier manera, necesitaría encontrar un punto en cada uno de los scripts donde un bucle repite algo, y el tiempo de espera depende de que el script se comporte razonablemente bien (para seguir revisando el tiempo).
El programador de tareas de Windows también podría ser parte de la solución; No lo he usado, pero ha habido una serie de hilos que hacen preguntas al respecto. ¿Puedo cerrar el programa jmp desde un script?podría sugerir algo.
Re: Tiempo de espera de la función de pruebaEsto suena como algo que podría hacerse con el Programador de tareas de Windows si no puede modificar los scripts. Cree un script que incluya los otros scripts, administre todos los errores que pueda en su script de "inclusión" y agregue tiempo de espera a la tarea de los programadores. Después de que se agote el tiempo, terminará la ejecución donde sea que haya llegado.
En general, ejecutar un lote de scripts sobre los que no tiene control puede complicarse rápidamente porque es posible que deba manejar muchas cosas diferentes (he tenido que hacer algo como esto). A continuación se presentan algunos problemas (u oportunidades de mejora) que enfrenté:
- Administrar la colisión de espacios de nombres
- Eliminar/Borrar símbolos innecesarios
- Sobrevivir a una situación en la que los scripts no usan Nombres predeterminados aquí (1)
- Sobrevivir con el uso de Borrar símbolos/Eliminar valores globales en el script incluido
- Cierre tablas de datos e informes innecesarios para ahorrar memoria
- Captura de errores que detendrían JMP
- Uso de Exit/Quit en los scripts incluidos
- Registre la ejecución del script para saber qué se ejecutó correctamente
La mayoría de estos son mucho más fáciles de manejar entrenando/modificando los scripts que se incluyen.
Re: Tiempo de espera de la función de pruebaEstoy ejecutando el script maestro desde el Programador de tareas.Y puedo tiempo de espera allí. Pero si uno de los scripts tiene el mismo error hora tras hora, día tras día, todos los scripts debajo de ese en la lista nunca se ejecutarán.
De la forma en que está organizado el script maestro, los scripts que se encuentran más adelante en la lista se ejecutan con menos frecuencia, por lo que puede llevar semanas darse cuenta de que se omiten por completo.Podría simplemente invertir el orden de la lista, pero luego los scripts que deben ejecutarse cada 10 minutos se omiten cada vez hasta que solucione el problema en el script problemático (esto es peor).
Además, el script maestro informa sobre su propio progreso después de que se ejecutan todos los scripts.Esto nunca sucedería si se elimina la tarea.
Mi solución actual es: comentar el script problemático y esperar a que la parte responsable se preocupe lo suficiente como para solucionarlo.
Funciona.