15 | | 1. Vérifiez le statut du job en utilisant la commande `glite-wms-job-status` `(Sur linux on peut utiliser la commande `watch` pour exécuter une commande dans une boucle. Pour effectuer la commande `glite-wms-job-submit` toutes les 5 secondes, utilisez `watch --interval 5glite-wms-job-status <jobid>`. Touchez ctrl-c pour sortir)`. |
16 | | * `glite-wms-job-status <jobid>` Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)". Combien d'états différents pouvez-vous distinguer? Si le job se termine dans l'état "Aborted", c'est qu'il ne passe pas. On peut trouver plus d'informations avec la commande `glite-wms-job-get-logging-info`. Cette commande requiert le jobid. |
17 | | 1. Lorsque le job est terminé ("Done(Success)"), récupérez les données générées à l'aide de la commande `glite-wms-job-output`. Le répertoire utilisé pour stocker les résultats dépend de la configuration du site. Au LAL, le répertoire est `~/JobOutput/`. Ce répertoire doit exister; créez-le si nécessaire. |
18 | | * `{{{glite-wms-job-output <jobid> }}}` La réponse indique le répertoire qui contient les résultats du job. |
19 | | 1. Vérifiez que tout s'est déroulé correctement en consultant les fichiers `std.out` et `std.err`. Le fichier `std.err` doit être vide et `std.out` doit avoir "Hello World". Cette procédure simple est utilisée pour le suivi de tous les jobs. Il est possible d'utiliser les options "-o", "-i", et "-noint" qui permettent de gérer un plus grand nombre de jobs avec les commandes `glite-wms-job-*`. Regardez les informations avec l'option "-help" ou la commande `man`. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé. Ce tutorial ne couvre pas cesAPIs. |
| 20 | * On peut utiliser l'option `-o fichier` de la commande `glite-wms-job-submit` pour que le ''jobid'' soit stocké dans un fichier. Le même fichier pourra être utilisé avec les autres commandes `glite-wms-job` en utilisant l'option `-i`. |
| 21 | 1. Vérifiez le statut du job en utilisant la commande `glite-wms-job-status` (Sur linux on peut utiliser la commande `watch` pour exécuter une commande dans une boucle. Pour effectuer la commande `glite-wms-job-submit` toutes les 15 secondes, utilisez `watch -n 15 glite-wms-job-status <jobid>` et taper ctrl-c pour sortir). |
| 22 | * Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)". |
| 23 | * Combien d'états différents pouvez-vous distinguer ? |
| 24 | * Si le job se termine dans l'état "Aborted", c'est qu'il y a eu une erreur. On peut trouver plus d'informations avec la commande `glite-wms-job-get-logging-info`. Cette commande requiert le jobid. |
| 25 | 1. Lorsque le job est terminé (Status: Done (Success)), récupérez les données générées à l'aide de la commande `glite-wms-job-output`. Le répertoire utilisé pour stocker les résultats dépend de la configuration du site. Au LAL, le répertoire est `~/JobOutput/`. Ce répertoire doit exister; créez-le si nécessaire. |
| 26 | * `{{{glite-wms-job-output <jobid> }}}` : la réponse indique le répertoire qui contient les résultats du job. |
| 27 | 1. Vérifiez que tout s'est déroulé correctement en consultant les fichiers `std.out` et `std.err`. Le fichier `std.err` doit être vide et `std.out` doit contenir "Hello World". Cette procédure simple est utilisée pour le suivi de tous les jobs. |
| 28 | |
| 29 | Comme indiqué dans la description de la commande `glite-wms-job-submit`, il est possible d'utiliser les options `-o`, `-i`, et `-noint` qui permettent de gérer un plus grand nombre de jobs avec les commandes `glite-wms-job-*`. Regardez les informations avec l'option `-help` ou la commande `man`. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé. Ce tutorial ne couvre pas ces APIs. |
23 | | * la ligne "Executable" doit être "HelloWorldScript.sh", |
24 | | * la ligne "Argument" peut rester avec "Hello World", |
25 | | * vous devez de plus définir le paramètre "InputSandbox". Tous les fichiers listés dans "InputSandbox" sont transfèrés avec le job. La syntaxe de cette ligne est : |
26 | | * `{{{InputSandbox = "HelloWorldScript.sh"; }}}` Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée. Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne "#!") doit exister dans le "Worker Node". |
27 | | 1. Modifier de nouveau `HelloWorld.jdl` de manière à ce qu'il appelle cette fois l'exécutable `myhostname`. Vous pouvez visualiser la source de cet exécutable, qui est un programme C : `myhostname.c`. Vous n'avez cette fois pas besoin de définir d'argument. Il faut modifier la ligne "InputSandbox". Exécutez le job et vérifiez que tout fonctionne. Sur quel ordinateur a tourné votre job? |
28 | | 1. L'exécution d'un programme en C compilé n'est pas forcément pratique : l'exécutable peut être d'une grande taille, dépendre de plusieurs fichiers, ou dépendre d'un environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois `HelloWorld.jdl` de manière à ce qu'il appelle le script `buildandrun.sh`, avec pour argument "myhostname". Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment? |
| 34 | * la ligne `Executable` doit être `HelloWorldScript.sh`, |
| 35 | * la ligne `Argument` peut rester avec `Hello World`, |
| 36 | * vous devez de plus définir le paramètre `InputSandbox`. Tous les fichiers listés dans `InputSandbox` sont transfèrés avec le job. La syntaxe de cette ligne est : |
| 37 | * `{{{InputSandbox = `HelloWorldScript.sh`; }}}` Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée. Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne `#!`) doit exister dans le `Worker Node`. |
| 38 | 1. Modifier de nouveau `HelloWorld.jdl` de manière à ce qu'il appelle cette fois l'exécutable `myhostname`. Vous pouvez visualiser la source de cet exécutable, qui est un programme C : `myhostname.c`. Vous n'avez cette fois pas besoin de définir d'argument. Il faut modifier la ligne `InputSandbox`. Exécutez le job et vérifiez que tout fonctionne. Sur quel ordinateur a tourné votre job? |
| 39 | 1. L'exécution d'un programme en C compilé n'est pas forcément pratique : l'exécutable peut être d'une grande taille, dépendre de plusieurs fichiers, ou dépendre d'un environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois `HelloWorld.jdl` de manière à ce qu'il appelle le script `buildandrun.sh`, avec pour argument `myhostname`. Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment? |
38 | | * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des `regular expressions` avec les chaines de caractères, en utilisant la fonction `RegExp("pattern",attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression : |
| 49 | * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des `regular expressions` avec les chaines de caractères, en utilisant la fonction `RegExp(`pattern`,attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression : |