Changes between Initial Version and Version 1 of installation_QCG_Broker_Client

Show
Ignore:
Timestamp:
05/18/11 17:08:14 (13 years ago)
Author:
bartek
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • installation_QCG_Broker_Client

    v1 v1  
     1= QCG Broker Client Installation = 
     2 
     3=Requirements= 
     4= Requirements = 
     5* '''Java (>= 1.5)'''\\ 
     6{{{ 
     7#!div style="font-size: 90%" 
     8For SL5.x 
     9{{{#!sh 
     10 # yum install java-1.6.0-sun-compat.x86_64 
     11}}} 
     12}}} 
     13* '''Apache Ant''' (>= 1.6) ("Optional tasks for ant" are required. For SL5.x the ''ant-nodeps.x86_64'' package must be installed) 
     14{{{ 
     15#!div style="font-size: 90%" 
     16For SL5.x 
     17{{{#!sh 
     18 # yum install ant.x86_64 ant-nodeps.x86_64 
     19}}} 
     20}}} 
     21* '''xml-commons-apis''' - installation of this package is not mandatory, but is recommended to avoid confusing information about not important errors. 
     22{{{ 
     23#!div style="font-size: 90%" 
     24For SL5.x 
     25{{{#!sh 
     26 # yum install xml-commons.x86_64 xml-commons-apis.x86_64 
     27}}} 
     28}}} 
     29* '''trusted CA certificates''' 
     30 To enable secure communication between client and QCG-Broker service set of trusted CA certificates must be copied either into `/etc/grid-security/certificates` directory or configured for every user. 
     31 
     32 For the PL-Grid project: Install Polish Grid and PL-Grid Simpla-CA certificates: 
     33{{{ 
     34#!div style="font-size: 90%" 
     35{{{#!sh 
     36 $ wget https://dist.eugridpma.info/distribution/igtf/current/accredited/RPMS/ca_PolishGrid-1.38-1.noarch.rpm 
     37 $ wget http://software.plgrid.pl/packages/general/ca_PLGRID-SimpleCA-1.0-2.noarch.rpm 
     38 $ wget https://dist.eugridpma.info/distribution/util/fetch-crl/fetch-crl-2.8.5-1.noarch.rpm 
     39 
     40 # rpm -i ca_PolishGrid-1.38-1.noarch.rpm  
     41 # rpm -i ca_PLGRID-SimpleCA-1.0-2.noarch.rpm  
     42 
     43 #install certificate revocation list fetching utility  
     44 # rpm -i fetch-crl-2.8.5-1.noarch.rpm 
     45 
     46 #get fresh CRLs now 
     47 # /usr/sbin/fetch-crl  
     48 
     49 #install cron job for it 
     50 # cat > /etc/cron.daily/fetch-crl.cron << EOF 
     51 # #!/bin/sh  
     52 # /usr/sbin/fetch-crl 
     53 # EOF 
     54 
     55 # chmod a+x /etc/cron.daily/fetch-crl.cron 
     56}}} 
     57}}} 
     58* '''User's credential''' 
     59To secure the communication and authenticate the user to the service the X509 proxy certificate is needded. 
     60 
     61= Installation = 
     62The installation of QCG-Broker service can be done in two ways: 
     631. Using the QCG-Broker precompiled source distribution. This kind of installation is designed for every Linux distribution meeting described above requirements. The installation can be performed as well by system administrator (to deploy one common instance of client accesible for all users) as every regular user (that wants to have his own instance). 
     642. Using provided RPM package. The package is designed for Scientific Linux 5.x (recommended version is 5.5) and the installation process requires root privileges. 
     65 
     66== Installation using the QCG-Broker distribution == 
     67* download the QCG-Broker archive from [[http://node2.qoscosgrid.man.poznan.pl/~piontek/qcg-broker/qcg-broker.tgz qcg-broker.tgz]] 
     68{{{ 
     69#!div style="font-size: 90%" 
     70{{{#!sh 
     71wget http://node2.qoscosgrid.man.poznan.pl/~piontek/qcg-broker/qcg-broker.tgz 
     72}}} 
     73}}} 
     74* unpack the archive 
     75{{{ 
     76#!div style="font-size: 90%" 
     77{{{#!sh 
     78 tar xzf qcg-broker.tgz 
     79}}} 
     80}}} 
     81=== Compilation === 
     82The distribution contains precompiled version of QCB-Broker command-line client, that can be deployed as it is. The compilation step is optional and can be skiped, except the situation in which some specific compiler options should be added or changed. 
     83  
     84* compile sources 
     85{{{ 
     86#!div style="font-size: 90%" 
     87{{{#!sh 
     88 cd qcg-broker-<VERSION> 
     89 ant client-stubs client 
     90}}} 
     91}}} 
     92 
     93=== Setup === 
     94* setup deployment configuration - all configuration variables are placed in `client-deploy.prop` file 
     95 * '''client.deploy.dir''' - directory where QCG-Broker client will be deployed 
     96 * '''client.service.url''' - QCG-Broker service URL 
     97 * '''client.service.dn''' - QCG-Broker credential DN 
     98 
     99=== Deployment === 
     100*  deploy QCG-Broker command-line client  
     101{{{ 
     102#!div style="font-size: 90%" 
     103{{{#!sh 
     104 ant deploy-client 
     105}}} 
     106}}} 
     107 
     108== Installation using provided RPM == 
     109Perform the whole installation procedure as a root user. 
     110 
     111* Install PL-Grid or/and QCG repositories: 
     112 # Official PL-Grid repository 
     113 rpm -Uvh http://software.plgrid.pl/packages/repos/plgrid-repos-2010-2.noarch.rpm 
     114 
     115 # QosCosGrid testing repository 
     116 cat > /etc/yum.repos.d/qcg.repo << EOF 
     117 [qcg] 
     118 name=QosCosGrid YUM repository 
     119 baseurl=http://fury.man.poznan.pl/qcg-packages/sl/x86_64/ 
     120 enabled=1 
     121 gpgcheck=0 
     122 EOF 
     123 
     124* install QCG-Broker client using YUM Package Manager: 
     125  yum install qcg-broker-client 
     126 
     127* configure the client specifying the QCG-Broker URL and DN: 
     128 vim /opt/plgrid/qcg/qcg-broker/client/etc/qcg-broker-client.conf 
     129 
     130=Configuration= 
     131To work properly and to authenticate user to the service, client has to be able to load user's proxy certificate and validate service credential during the handshake procedure. To do this it needs to know location of the file containing proxy certificate and directory containing public keys of Certificate Authorities it should trust. 
     132 
     133* Client looks for proxy according to following rules: 
     134<pre> 
     135 It first checks the X509_USER_PROXY system property. If the property 
     136 is not set, it checks next the 'proxy' property in the current 
     137 configuration. If that property is not set, then it defaults to a 
     138 value based on the following rules:  
     139 If a UID system property is set, and running on a Unix machine it 
     140 returns /tmp/x509up_u${UID}. If any other machine then Unix, it returns 
     141 ${tempdir}/x509up_u${UID}, where tempdir is a platform-specific 
     142 temporary directory as indicated by the java.io.tmpdir system property. 
     143 If a UID system property is not set, the username will be used instead 
     144 of the UID. That is, it returns ${tempdir}/x509up_u_${username} 
     145</pre> 
     146 
     147* Client looks for the CA directory according to following rules: 
     148<pre> 
     149 It first checks the X509_CERT_DIR system property. If the property 
     150 is not set, it checks next the 'cacert' property in the current 
     151 configuration. If that property is not set, it tries to find 
     152 the certificates using the following rules: 
     153 First the ${user.home}/.globus/certificates directory is checked. 
     154 If the directory does not exist, and on a Unix machine, the 
     155 /etc/grid-security/certificates directory is checked next. 
     156 If that directory does not exist and GLOBUS_LOCATION 
     157 system property is set then the ${GLOBUS_LOCATION}/share/certificates 
     158 directory is checked.  
     159</pre> 
     160 
     161CoG library configuration can be modified using the COG properties file '''~/.globus/cog.properties''' 
     162<pre> 
     163#Java CoG Kit Configuration File 
     164proxy=/tmp/x509up_u501 
     165cacert=/etc/grid-security/certificates/ 
     166</pre> 
     167 
     168Additionaly the location of user's certificate and private key must be specified.  
     169<pre> 
     170usercert=/home/piontek/.globus/usercert.pem 
     171userkey=/home/piontek/.globus/userkey.pem 
     172</pre> 
     173If they are specified and user proxy certificate doesn't exist it will be automatically created by the client. Otherwise the proxy certificate has to be created by ''grid-proxy-init'' tool. 
     174 
     175=Job Profile= 
     176Every experiment submitted to GRMS has to be described by XML-based document called "Job Profile". The structure of Job Profile is formalized by [http://node2.qoscosgrid.man.poznan.pl/~qcg/download/QCGJobProfile.xsd Job Profile schema]. 
     177 
     178Examples of Job Profiles describing basic use cases are distributed with QCG-Broker and can be found in ''<CLIENT_DIR>/examples directory''. 
     179 
     180=Usage= 
     181 
     182The QCG-Groker command-line java based client can operate in two modes: 
     183 
     184* '''batch mode''' – that executes single operation with arguments passed directly to the client during its invocation. The batch mode allows to use the client in any kind of scripts mostly in cases when the processing of output is needed to steer the experiment, 
     185* '''console mode''' – that works similar to shell console in which user can type in lines with operations and arguments to be executed by service. The console mode gives additional useful features like aliases, history accessible by arrows-keys, creation and management of user proxy, help functionality.  
     186 
     187The usage of the client depends on the mode: 
     188* for batch mode: “qcg-broker OPRATION [ARG1 .. ARGn]” 
     189* for console mode: “qcg-broker -console” and then user is prompted to type in lines in format “OPERATION [ARG1 .. ARGn]” to be processed by client.  
     190 
     191'''IMPORTANT:''' To secure the communication between client and service and to delegate user's privileges to the service client needs access to user's proxy certificate. 
     192 
     193==Operations== 
     194 
     195Regardless from the mode the QCG-Broker java based command-line client supports following list of operations: 
     196 
     197{| border="1" align="center" style="text-align:center;" 
     198! Operation 
     199! Arguments 
     200! Description 
     201|- 
     202| '''submit_job'''  
     203| <desc_file> [GRMS or JSDL]   
     204| align="left" | submits a job to be executed. The description of job can be expressed either in native QCG-Broker language or if it is possible in JSDL one. If the description is valid client returns to the user a globally unique job identifier, which unambiguously identifies the job in the system.  QCG defines jobs as a sets of dependent tasks that constitute a logical whole (workflow). Each task is executed by system only if all tasks it depends on are in specified by the user states.  
     205|- 
     206| '''list_jobs'''  
     207| [<limit>] [<status>]   
     208| align="left" | lists jobs belonging to the user. It is possible either to limit number of jobs or to display only ones in given state. All possible states are listed below  the table. 
     209|- 
     210| '''list_user_jobs'''  
     211| [<limit>] [<status>] <user>   
     212| align="left" | lists jobs belonging to the given user. The functionality is destined for administrative purposes.                                  
     213|- 
     214| '''test_description'''  
     215| <desc_file> [GRMS or JSDL] 
     216| align="left" | validates job description   
     217|- 
     218| '''translate_description'''  
     219| <desc_file> JSDL  
     220| align="left" | translates job description to native QCG-Broker one  
     221|- 
     222| '''job_info'''  
     223| <jobId> [<showJobDesc>] 
     224| align="left" | return complex information about the given job. If the showJobDesc is ''false'' the job description is not shown  
     225|- 
     226| '''cancel_job'''  
     227| <jobId>  
     228| align="left" | cancels execution of the given job  
     229|- 
     230| '''commit_job'''  
     231| <jobId>  
     232| align="left" | allows to approve the job submitted with two phase commit mechanism to be processed by the system. The two phase commit mechanism can be used to register notifications before the processing of the job will be started by broker.  
     233|-                                                                                                                
     234| '''list_tasks'''  
     235| <jobId> [<status>]  
     236| align="left" | lists tasks belonging to given job. Optionally it is possible to specify the task's status. Possible task statuses are listed below the table. 
     237|- 
     238| '''tasks_statuses'''  
     239| <jobId> <summary>  
     240| align="left" | lists tasks constituting the given job with their statuses. If the ''summary'' argument is ''true'' some kind of statistics is additionally displayed. 
     241|- 
     242| '''register_job_notification'''  
     243| <jobId> <url>   
     244| align="left" | registers notification consumer for the given job  
     245|- 
     246| '''list_job_notifications'''  
     247| <jobId>   
     248| align="left" | lists notifications registered for the given job  
     249|- 
     250| '''register_tasks_notification'''  
     251| <jobId> <url>  
     252| align="left" | register notification for all tasks of the given job 
     253|- 
     254| '''monitor_job'''  
     255| <jobId> [<interval>]  
     256| align="left" | monitors status changes of tasks belonging to given job. The ''interval'' argument determines delay in seconds between next status checks. 
     257|- 
     258| '''monitor_task'''  
     259| <jobId> <taskId> [<interval>]  
     260| align="left" | monitors status changes of allocations belonging to the given tasks. The ''interval'' argument determines delay in seconds between next status checks. 
     261|- 
     262| '''task_info'''  
     263| <jobId> <taskId> [<showDesc> [<limit>]]   
     264| displays information about the given task. If the ''showDesc'' is false the task description is not shown. If the ''limit'' argument is specified the history of the task is limited to given value. 
     265|- 
     266| '''register_task_notification'''  
     267| <jobId> <taskId> <url>   
     268| align="left" | registers task's notification consumer  
     269|- 
     270| '''list_task_notifications'''  
     271| <jobId> <taskId>  
     272| lists task's notifications 
     273|- 
     274| '''cancel_task'''  
     275| <jobId> <taskId>   
     276| align="left" | cancels execution of the given task 
     277|- 
     278| '''commit_task'''  
     279| <jobId> <taskId>  
     280| align="left" | commits the given task to be processed by the system 
     281|- 
     282| '''reserve_resources'''  
     283| [<taskId>] <job_desc> [ GRMS or JSDL]  
     284| align="left" | reserve resources that meet either the wole job or given task requirements. The reservation identifier is returned. '''This functionality is not implemented yet!''' 
     285|- 
     286| '''reservation_info'''  
     287| <reservationId>  
     288| align="left" | return complex information concerning the given reservation: list of reserved resources, local identifiers of reservations, reservation time slot. T'''his functionality id not implemented yet!''' 
     289|- 
     290| '''cancel_reservation'''  
     291| <reservationId>  
     292| align="left" | releases reserved resources. '''This functionality is not implemented yet!''' 
     293|} 
     294 
     295== Usage examples == 
     296 
     297The example presented below is the QCG-Broker Job Profile describing the parameter-sweep experiment executing a set of UNIX calendar tasks for the predefined space of "month" parameter. 
     298 
     299<pre> 
     300<grmsJob appId="calendar_example"> 
     301        <task persistent="true" taskId="calendar"> 
     302                <execution type="single"> 
     303                        <executable> 
     304                                <execFile> 
     305                                        <file> 
     306                                                <location type="URL">file:////usr/bin/cal</location> 
     307                                        </file> 
     308                                </execFile> 
     309                        </executable> 
     310                        <arguments> 
     311                                <value>${PS_month}</value> 
     312                                <value>2010</value> 
     313                        </arguments> 
     314                        <stdout> 
     315                                <file> 
     316                                        <location type="URL">${TASK_DIR}/stdout.txt</location> 
     317                                </file> 
     318                        </stdout> 
     319                </execution> 
     320                <parametersSweep> 
     321                        <parameter> 
     322                                <name>month</name> 
     323                                <value> 
     324                                        <loop> 
     325                                                <start>1</start> 
     326                                                <end>12</end> 
     327                                                <step>1</step> 
     328                                                <except> 
     329                                                        <value>3</value> 
     330                                                        <value>6</value> 
     331                                                </except> 
     332                                        </loop> 
     333                                </value> 
     334                        </parameter> 
     335                </parametersSweep> 
     336        </task> 
     337</grmsJob> 
     338 
     339</pre>  
     340 
     341===submit_job=== 
     342* ''submit_job <job_profile>'' - submits job. <job_profile> must be the path to the file containing the Job Profile. 
     343<pre> 
     344qcg-client submit_job ../examples/usecase8.xml 
     345Your identity: C=PL,O=GRID,O=PSNC,CN=Tomasz Piontek 
     346Creating proxy, please wait... 
     347Proxy verify OK 
     348Your proxy is valid until Tue May 17 02:55:47 CEST 2011 
     349UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     350ProxyLifetime = 0 Days 11 Hours 59 Minutes 57 Seconds 
     351 
     352jobId = 1305550554579_calendar_example_5366 
     353 
     354</pre> 
     355 
     356===list_jobs=== 
     357* ''list_jobs [status] [limit]'' - lists jobs. Optionally it is possible to specify status or limits the output to some number of recent jobs. 
     358<pre> 
     359qcg-client list_jobs 5 
     360UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     361ProxyLifetime = 0 Days 11 Hours 58 Minutes 47 Seconds 
     362 
     363Number of jobs: 5 
     364List of jobs:  
     3651301904727887_calendar_example_1403 
     3661304020897352_calendar_example_4252 
     3671304065465905_calendar_example_9526 
     3681305287977790_calendar_example_4779 
     3691305550554579_calendar_example_5366 
     370</pre> 
     371 
     372===job_info=== 
     373* ''job_info <jobId> <showJobProfile>'' - displays information about the given job. The <showJobProfile> argument of boolean type specifies whether the Job Profile should be displayed or not. 
     374<pre> 
     375qcg-client job_info 1305550554579_calendar_example_5366 false 
     376UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     377ProxyLifetime = 0 Days 11 Hours 58 Minutes 18 Seconds 
     378 
     379UserDN: /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     380Project:  
     381Status: FINISHED 
     382StatusDesc:  
     383SubmissionTime: Mon May 16 14:55:54 CEST 2011 
     384FinishTime: Mon May 16 14:56:42 CEST 2011 
     385Number of tasks: 10 
     386Tasks: calendar_PSit0 calendar_PSit1 calendar_PSit2 calendar_PSit3 calendar_PSit4 calendar_PSit5 calendar_PSit6 calendar_PSit7 calendar_PSit8 calendar_PSit9  
     387</pre> 
     388 
     389<pre> 
     390qcg-client job_info 1305550554579_calendar_example_5366 
     391UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     392ProxyLifetime = 0 Days 11 Hours 58 Minutes 6 Seconds 
     393 
     394UserDN: /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     395Project:  
     396Status: FINISHED 
     397StatusDesc:  
     398SubmissionTime: Mon May 16 14:55:54 CEST 2011 
     399FinishTime: Mon May 16 14:56:42 CEST 2011 
     400Number of tasks: 10 
     401Tasks: calendar_PSit0 calendar_PSit1 calendar_PSit2 calendar_PSit3 calendar_PSit4 calendar_PSit5 calendar_PSit6 calendar_PSit7 calendar_PSit8 calendar_PSit9  
     402DescriptionType: GRMS 
     403UserDescription:  
     404<grmsJob appId="calendar_example"> 
     405  <task persistent="true" taskId="calendar"> 
     406    <execution type="single"> 
     407      <executable> 
     408        <execFile> 
     409          <file> 
     410            <location type="URL">file:////usr/bin/cal</location> 
     411          </file> 
     412        </execFile> 
     413      </executable> 
     414      <arguments> 
     415        <value>${PS_month}</value> 
     416        <value>2010</value> 
     417      </arguments> 
     418      <stdout> 
     419        <file> 
     420          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     421        </file> 
     422      </stdout> 
     423    </execution> 
     424    <parametersSweep> 
     425      <parameter> 
     426        <name>month</name> 
     427        <value> 
     428          <loop> 
     429            <start>1</start> 
     430            <end>12</end> 
     431            <step>1</step> 
     432            <except> 
     433              <value>3</value> 
     434              <value>6</value> 
     435            </except> 
     436          </loop> 
     437        </value> 
     438      </parameter> 
     439    </parametersSweep> 
     440  </task> 
     441</grmsJob> 
     442 
     443GrmsDescription:  
     444<grmsJob appId="calendar_example"> 
     445  <task persistent="true" taskId="calendar_PSit0"> 
     446    <execution type="single"> 
     447      <executable> 
     448        <execFile> 
     449          <file> 
     450            <location type="URL">file:////usr/bin/cal</location> 
     451          </file> 
     452        </execFile> 
     453      </executable> 
     454      <arguments> 
     455        <value>1.0</value> 
     456        <value>2010</value> 
     457      </arguments> 
     458      <stdout> 
     459        <file> 
     460          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     461        </file> 
     462      </stdout> 
     463    </execution> 
     464  </task> 
     465  <task persistent="true" taskId="calendar_PSit1"> 
     466    <execution type="single"> 
     467      <executable> 
     468        <execFile> 
     469          <file> 
     470            <location type="URL">file:////usr/bin/cal</location> 
     471          </file> 
     472        </execFile> 
     473      </executable> 
     474      <arguments> 
     475        <value>2.0</value> 
     476        <value>2010</value> 
     477      </arguments> 
     478      <stdout> 
     479        <file> 
     480          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     481        </file> 
     482      </stdout> 
     483    </execution> 
     484  </task> 
     485  <task persistent="true" taskId="calendar_PSit2"> 
     486    <execution type="single"> 
     487      <executable> 
     488        <execFile> 
     489          <file> 
     490            <location type="URL">file:////usr/bin/cal</location> 
     491          </file> 
     492        </execFile> 
     493      </executable> 
     494      <arguments> 
     495        <value>4.0</value> 
     496        <value>2010</value> 
     497      </arguments> 
     498      <stdout> 
     499        <file> 
     500          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     501        </file> 
     502      </stdout> 
     503    </execution> 
     504  </task> 
     505  <task persistent="true" taskId="calendar_PSit3"> 
     506    <execution type="single"> 
     507      <executable> 
     508        <execFile> 
     509          <file> 
     510            <location type="URL">file:////usr/bin/cal</location> 
     511          </file> 
     512        </execFile> 
     513      </executable> 
     514      <arguments> 
     515        <value>5.0</value> 
     516        <value>2010</value> 
     517      </arguments> 
     518      <stdout> 
     519        <file> 
     520          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     521        </file> 
     522      </stdout> 
     523    </execution> 
     524  </task> 
     525  <task persistent="true" taskId="calendar_PSit4"> 
     526    <execution type="single"> 
     527      <executable> 
     528        <execFile> 
     529          <file> 
     530            <location type="URL">file:////usr/bin/cal</location> 
     531          </file> 
     532        </execFile> 
     533      </executable> 
     534      <arguments> 
     535        <value>7.0</value> 
     536        <value>2010</value> 
     537      </arguments> 
     538      <stdout> 
     539        <file> 
     540          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     541        </file> 
     542      </stdout> 
     543    </execution> 
     544  </task> 
     545  <task persistent="true" taskId="calendar_PSit5"> 
     546    <execution type="single"> 
     547      <executable> 
     548        <execFile> 
     549          <file> 
     550            <location type="URL">file:////usr/bin/cal</location> 
     551          </file> 
     552        </execFile> 
     553      </executable> 
     554      <arguments> 
     555        <value>8.0</value> 
     556        <value>2010</value> 
     557      </arguments> 
     558      <stdout> 
     559        <file> 
     560          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     561        </file> 
     562      </stdout> 
     563    </execution> 
     564  </task> 
     565  <task persistent="true" taskId="calendar_PSit6"> 
     566    <execution type="single"> 
     567      <executable> 
     568        <execFile> 
     569          <file> 
     570            <location type="URL">file:////usr/bin/cal</location> 
     571          </file> 
     572        </execFile> 
     573      </executable> 
     574      <arguments> 
     575        <value>9.0</value> 
     576        <value>2010</value> 
     577      </arguments> 
     578      <stdout> 
     579        <file> 
     580          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     581        </file> 
     582      </stdout> 
     583    </execution> 
     584  </task> 
     585  <task persistent="true" taskId="calendar_PSit7"> 
     586    <execution type="single"> 
     587      <executable> 
     588        <execFile> 
     589          <file> 
     590            <location type="URL">file:////usr/bin/cal</location> 
     591          </file> 
     592        </execFile> 
     593      </executable> 
     594      <arguments> 
     595        <value>10.0</value> 
     596        <value>2010</value> 
     597      </arguments> 
     598      <stdout> 
     599        <file> 
     600          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     601        </file> 
     602      </stdout> 
     603    </execution> 
     604  </task> 
     605  <task persistent="true" taskId="calendar_PSit8"> 
     606    <execution type="single"> 
     607      <executable> 
     608        <execFile> 
     609          <file> 
     610            <location type="URL">file:////usr/bin/cal</location> 
     611          </file> 
     612        </execFile> 
     613      </executable> 
     614      <arguments> 
     615        <value>11.0</value> 
     616        <value>2010</value> 
     617      </arguments> 
     618      <stdout> 
     619        <file> 
     620          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     621        </file> 
     622      </stdout> 
     623    </execution> 
     624  </task> 
     625  <task persistent="true" taskId="calendar_PSit9"> 
     626    <execution type="single"> 
     627      <executable> 
     628        <execFile> 
     629          <file> 
     630            <location type="URL">file:////usr/bin/cal</location> 
     631          </file> 
     632        </execFile> 
     633      </executable> 
     634      <arguments> 
     635        <value>12.0</value> 
     636        <value>2010</value> 
     637      </arguments> 
     638      <stdout> 
     639        <file> 
     640          <location type="URL">${TASK_DIR}/stdout.txt</location> 
     641        </file> 
     642      </stdout> 
     643    </execution> 
     644  </task> 
     645</grmsJob> 
     646 
     647</pre> 
     648 
     649===tasks_statuses=== 
     650* ''tasks_statuses <jobId>'' - lists tasks constituting the given job with their statuses. 
     651 
     652<pre> 
     653qcg-broker tasks_statuses 1305550554579_calendar_example_5366 
     654UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     655ProxyLifetime = 0 Days 11 Hours 41 Minutes 30 Seconds 
     656 
     657Number of tasks: 10 
     658Tasks statuses:  
     659calendar_PSit7  : FINISHED 
     660calendar_PSit6  : FINISHED 
     661calendar_PSit5  : FINISHED 
     662calendar_PSit4  : FINISHED 
     663calendar_PSit3  : FINISHED 
     664calendar_PSit2  : FINISHED 
     665calendar_PSit1  : FINISHED 
     666calendar_PSit0  : FINISHED 
     667calendar_PSit9  : FINISHED 
     668calendar_PSit8  : FINISHED 
     669------ SUMMARY -------- 
     670Number of tasks: 10 
     671FINISHED        : 10 
     672 
     673</pre> 
     674 
     675===task_info=== 
     676* ''task_info <jobId> <taskId>'' - displays information about the given job 
     677<pre> 
     678qcg-broker task_info 1305550554579_calendar_example_5366 calendar_PSit0 
     679UserDN = /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     680ProxyLifetime = 0 Days 11 Hours 40 Minutes 11 Seconds 
     681 
     682TaskType: SINGLE 
     683SubmissionTime: Mon May 16 14:55:57 CEST 2011 
     684FinishTime: Mon May 16 14:56:27 CEST 2011 
     685ProxyLifetime: PT0S 
     686Status: FINISHED 
     687StatusDesc:  
     688StartTime: Mon May 16 14:56:04 CEST 2011 
     689DescriptionType: <task persistent="true" taskId="calendar_PSit0"> 
     690  <execution type="single"> 
     691    <executable> 
     692      <execFile> 
     693        <file> 
     694          <location type="URL">file:////usr/bin/cal</location> 
     695        </file> 
     696      </execFile> 
     697    </executable> 
     698    <arguments> 
     699      <value>1.0</value> 
     700      <value>2010</value> 
     701    </arguments> 
     702    <stdout> 
     703      <file> 
     704        <location type="URL">${TASK_DIR}/stdout.txt</location> 
     705      </file> 
     706    </stdout> 
     707  </execution> 
     708</task> 
     709 
     710 
     711Coallocation:  
     712UserDN: /C=PL/O=GRID/O=PSNC/CN=Tomasz Piontek 
     713HostName: grass1.man.poznan.pl 
     714ProcessesCount: 1 
     715ProcessesGroupId:  
     716Status: FINISHED 
     717StatusDescription:  
     718SubmissionTime: Mon May 16 14:56:04 CEST 2011 
     719FinishTime: Mon May 16 14:56:21 CEST 2011 
     720LocalSubmissionTime: Mon May 16 14:56:06 CEST 2011 
     721LocalStartTime: Mon May 16 14:56:10 CEST 2011 
     722LocalFinishTime: Mon May 16 14:56:10 CEST 2011 
     723</pre>