== GANGA en mode ligne de commande == Ce tutoriel montre le principe de fonctionnement de GANGA. Le job exécuté est celui de l'exemple de soumission de job avec LCG2. Pour lancer un job, vous avez besoin d'un fichier de script : * L'executable Le fichier job.sh est le script qui va être exécuter sur la machine distante (le WN) * __Lancement de GANGA__ [[BR]][[BR]] L'exécutable GANGA se trouve sous $GANGA_INSTALL_DIR/install/X.Y.Z/bin où X.Y.Z est la version de GANGA.[[BR]] Pour plus de facilité, mettez à jour votre variable d'environnement $PATH avec le chemin vers l'executable. Pour lacer GANGA il suffit de taper la commande '''ganga'''. {{{ [lambert@lpsc-ui ~]$ ganga *** Welcome to Ganga *** Version: Ganga-5-0-4 Documentation and support: http://cern.ch/ganga Type help() or help('index') for online help. This is free software (GPL), and you are welcome to redistribute it under certain conditions; type license() for details. ATLAS User Support is provided by the Hypernews Forum Ganga User and Developers You find the forum at https://hypernews.cern.ch/HyperNews/Atlas/get/GANGAUserDeveloper.html or you can send an email to hn-atlas-GANGAUserDeveloper@cern.ch GangaAtlas : INFO Tasks read from file Ganga.GPIDev.Lib.JobRegistry : INFO Found 1 jobs in "jobs", completed in 0 seconds Ganga.GPIDev.Lib.JobRegistry : INFO Found 1 jobs in "templates", completed in 0 seconds In [1]: }}} PS: Si il s'agit de votre première session, GANGA peut vous demander votre passphrase afin de créer un proxy VOMS à partir de votre certificat. Ce proxy sera utiliser par l'application lors de la soumission de job. * __Définir un objet Job__ [[BR]][[BR]] L'objet ''Job'' représente votre job, vous allez ensuite renseigner certains de ses attributs avant de le soumettre en utilisant ses fonctionnalités.[[BR]] Après le lancement de GANGA, vous obtenez un prompt, pour définir l'objet ''Job'' tapez la commande suivante. {{{ j=Job() }}} j designe maintenant pour GANGA une instance d'un objet de type Job en mémoire. * __Définir les paramètres du Job__ [[BR]][[BR]] Notre job prend deux arguments en entrée. Nous l'indiquons à notre instance de job de la façon suivante : {{{ In [2]:j.application = Executable(exe = File('~/TestGrid/edg3/job.sh'), args=['girafe','flipflap']) }}} * __Soumission de job__[[BR]][[BR]] Pour soumettre le job, il faut utiliser la fonctionnalité ''submit'' de l'instance. {{{ In [3]:j.submit() Ganga.GPIDev.Lib.Job : INFO submitting job 18 Ganga.GPIDev.Adapters : WARNING file /atlas/lambert/TestGrid/edg3/job.sh is not executable, overriding executable permissions in the input sandbox Ganga.GPIDev.Adapters : INFO submitting job 18 to Local backend Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "submitted" Out[3]: 1 }}} * __Obtenir l'ID du job__[[BR]][[BR]] Avec GANGA les jobs ont leur propre ID. Pour l'obtenir exécutez les commande suivante {{{ In [4]:print j.id 18 Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "running" Ganga.GPIDev.Lib.Job : INFO job 18 status changed to "completed" }}} PS: En cas de changements de statut du job, les changements apparaissent quand vous appuyer sur la touche ''return''. * __Obtenir une description complete du job__[[BR]][[BR]] Rien de plus simple, tapez j (la variable qui représente l'instance du Job) : {{{ In [5]:j Out[5]: Job ( status = 'completed' , name = '' , inputdir = '/atlas/lambert/gangadir/workspace/lambert/LocalAMGA/18/input/' , outputdir = '/atlas/lambert/gangadir/workspace/lambert/LocalAMGA/18/output/' , outputsandbox = [] , id = 18 , info = JobInfo ( submit_counter = 1 ) , inputdata = None , merger = None , inputsandbox = [] , application = Executable ( exe = File(name='/atlas/lambert/TestGrid/edg3/job.sh',subdir='.') , env = {} , args = ['girafe', 'flipflap'] ) , outputdata = None , splitter = None , subjobs = 'Job slice: jobs(18).subjobs (0 jobs) ' , backend = Local ( actualCE = 'lpsc-ui.in2p3.fr' , workdir = '/tmp/tmptrit10' , id = 2126 , exitcode = 0 ) ) }}} * __Récupérer la sortie du job__[[BR]][[BR]] Les sortie du job sont stockées dans le répertoire indiqué dans le paramètre outputdir (voir ci-dessus)[[BR]] Il y a deux façon de lire une sortie de job; En utilisant directement les commandes shell avec un '!' devant {{{ In [6]:!ls $j.outputdir __jobstatus__ stderr stdout __syslog__ In [7]:!cat $j.outputdir/stdout Comment t'appelles tu girafe ? Je m'appelle flipflap ! }}} ou alors en définnissant un objet ''fichier'' et en utilisant ses fonctionnalités {{{ In [8]:outfile = file(j.outputdir+'stdout') In [9]:print outfile.read() Comment t'appelles tu girafe ? Je m'appelle flipflap ! }}} une autre variante consiste à ouvrir le fichier avec le programme associé à son extension (nécessite d'avoir un service X11 qui tourne) {{{ In [17]:j.peek('stdout') }}} dans notre cas, le fichier est ouvert avec vi dans une nouvelle fenêtre [[BR]][[BR]] [[Image(jpeek.gif)]][[BR]][[BR]] [wiki:tutoganga up]