Timeout de la fonction tryJ'ai un seul script qui appelle de nombreux autres scripts pour les processus de reporting sur les équipements et la création de rapports. Parfois, les données provenant des outils de processus contiennent des erreurs que JMP ne peut pas gérer.J'ai donc encapsulé les appels dans une fonction Try() comme ceci :
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
Parfois, le script inclus ne plante pas, mais il ne se termine pas non plus.
Bien que cela puisse probablement être résolu en modifiant le script et la manière dont il traite les données, ce ne sont pas mes scripts à modifier.
Existe-t-il un moyen pour que la fonction try considère l'essai comme un échec si cela prend plus d'une heure, par exemple ?
Existe-t-il un autre moyen d'y parvenir ? Existe-t-il un moyen de dire au Try() qu'il doit abandonner ?
Merci
Automatisation et scriptsRe : Timeout de la fonction tryL’un a-t-il besoin de l’autre pour fonctionner ?Si votre script principal comprend simplement un ensemble de scripts distincts, pourquoi ne pas simplement exécuter chacun d'entre eux comme une tâche différente ?Alors ça n'a pas d'importance.Chacun ouvrirait sa propre instance de JMP, exécuterait puis fermerait JMP.Vous pouvez également contrôler le délai d'attente de chacun individuellement.
Re : Timeout de la fonction tryJ'exécute le script principal du Planificateur de tâches.Et je peux expirer là-bas. Mais si l'un des scripts présente la même erreur heure après heure, jour après jour, tous les scripts situés en dessous de celui-ci dans la liste ne seront jamais exécutés.
Selon la manière dont le script principal est organisé, les scripts situés plus loin dans la liste sont exécutés moins fréquemment. Cela peut donc prendre des semaines pour remarquer qu'ils sont complètement ignorés.Je pourrais simplement inverser l'ordre de la liste - mais les scripts qui doivent être exécutés toutes les 10 minutes sont ignorés à chaque fois jusqu'à ce que je résolve le problème dans le script problématique (c'est pire).
De plus, le script maître signale sa propre progression une fois tous les scripts exécutés.Cela n'arriverait jamais si la tâche était interrompue.
Ma solution actuelle est la suivante : commentez le script problématique et attendez que la partie responsable s'en soucie suffisamment pour le corriger.
Ça marche.
Re : Timeout de la fonction tryCela ressemble à quelque chose qui pourrait être fait avec le Planificateur de tâches Windows si vous ne pouvez pas modifier les scripts. Créez un script qui inclut les autres scripts, gérez toutes les erreurs possibles dans votre script "d'inclusion" et ajoutez un délai d'attente à la tâche du planificateur. Une fois le temps écoulé, il terminera l'exécution là où elle se trouve.
En général, exécuter un lot de scripts sur lesquels vous n'avez pas de contrôle peut rapidement devenir compliqué car vous devrez peut-être gérer beaucoup de choses différentes (j'ai dû faire quelque chose comme ça). Vous trouverez ci-dessous quelques problèmes (ou opportunités d'amélioration) auxquels j'ai été confronté :
- Gérer les collisions d'espaces de noms
- Supprimer/Effacer les symboles inutiles
- Survivre à une situation où les scripts n'utilisent pas les noms par défaut vers ici (1)
- Survivez à l'utilisation de Clear Symbols/Delete Globals dans le script inclus
- Fermez les tables de données et les rapports inutiles pour économiser de la mémoire
- Détecter les erreurs qui arrêteraient JMP
- Utilisation de Exit/Quit dans les scripts inclus
- Journaliser l'exécution du script pour savoir ce qui a été exécuté correctement
La plupart d'entre eux sont beaucoup plus faciles à gérer en entraînant/modifiant les scripts inclus.
Re : Timeout de la fonction tryNon, try() n'a pas de mécanisme de délai d'attente ; il est très similaire au mécanisme try-throw-catch C++. Comme vous l'imaginez, vous devrez mettre la logique dans chacun des scripts inclus, ce qui pourrait faire quelque chose comme
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
Je sais que vous avez dit que vous ne pouviez pas ouvrir ces scripts pour les modifier, mais si vous le faisiez, vous souhaiterez peut-être qu'ils rappellent votre code pour indiquer la progression. Ensuite, vous pouvez effectuer le lancement du rappel si nécessaire. Quoi qu'il en soit, vous devrez trouver un point dans chacun des scripts où une boucle répète quelque chose, et le délai d'attente dépend du comportement raisonnablement bon du script (pour continuer à vérifier l'heure).
Le planificateur de tâches Windows pourrait également faire partie de la solution ; Je ne l'ai pas utilisé mais de nombreux sujets posent des questions à ce sujet. Puis-je fermer le programme jmp à partir d’un script ?pourrait suggérer quelque chose.