Files
oldlinux-files/Ref-docs/POSIX/susv3/utilities/xcu_chap03.html
2024-02-19 00:21:47 -05:00

2899 lines
94 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" rel="stylesheet" href="style.css"><!-- Generated by The Open Group's rhtm tool v1.2.1 -->
<!-- Copyright (c) 2001 The Open Group, All Rights Reserved -->
<title>Batch Environment Services</title>
</head>
<body bgcolor="white">
<script type="text/javascript" language="JavaScript" src="../jscript/codes.js">
</script>
<basefont size="3"> <!--header start-->
<center><font size="2">The Open Group Base Specifications Issue 6<br>
IEEE Std 1003.1-2001<br>
Copyright &copy; 2001 The IEEE and The Open Group, All Rights reserved.</font></center>
<!--header end-->
<hr size="2" noshade>
<h2><a name="tag_03"></a>Batch Environment Services</h2>
<div class="box">
<p><sup>[<a href="javascript:open_code('BE')">BE</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">
This chapter describes the services and utilities that shall be implemented on all systems that claim conformance to the Batch
Environment option. This functionality is dependent on support of this option (and the rest of this section is not further marked
for this option). <img src="../images/opt-end.gif" alt="[Option End]" border="0"></p>
</div>
<h3><a name="tag_03_01"></a>General Concepts</h3>
<h4><a name="tag_03_01_01"></a>Batch Client-Server Interaction</h4>
<p>Batch jobs are created and managed by batch servers. A batch client interacts with a batch server to access batch services on
behalf of the user. In order to use batch services, a user must have access to a batch client.</p>
<p>A batch server is a computational entity, such as a daemon process, that provides batch services. Batch servers route, queue,
modify, and execute batch jobs on behalf of batch clients.</p>
<p>The batch utilities described in this volume of IEEE&nbsp;Std&nbsp;1003.1-2001 (and listed in <a href="#tagtcjh_6">Batch
Utilities</a> ) are clients of batch services; they allow users to perform actions on the job such as creating, modifying, and
deleting batch jobs from a shell command line. Although these batch utilities may be said to accomplish certain services, they
actually obtain services on behalf of a user by means of requests to batch servers.<br>
</p>
<center><b><a name="tagtcjh_6"></a> Table: Batch Utilities</b></center>
<center>
<table cellpadding="3" align="center">
<tr valign="top">
<td align="left">
<p class="tent"><br>
<a href="../utilities/qalter.html"><i>qalter</i></a><br>
<a href="../utilities/qdel.html"><i>qdel</i></a><br>
<a href="../utilities/qhold.html"><i>qhold</i></a><br>
&nbsp;</p>
</td>
<td align="left">
<p class="tent"><br>
<a href="../utilities/qmove.html"><i>qmove</i></a><br>
<a href="../utilities/qmsg.html"><i>qmsg</i></a><br>
<a href="../utilities/qrerun.html"><i>qrerun</i></a><br>
&nbsp;</p>
</td>
<td align="left">
<p class="tent"><br>
<a href="../utilities/qrls.html"><i>qrls</i></a><br>
<a href="../utilities/qselect.html"><i>qselect</i></a><br>
<a href="../utilities/qsig.html"><i>qsig</i></a><br>
&nbsp;</p>
</td>
<td align="left">
<p class="tent"><br>
<a href="../utilities/qstat.html"><i>qstat</i></a><br>
<a href="../utilities/qsub.html"><i>qsub</i></a><br>
&nbsp;</p>
</td>
</tr>
</table>
</center>
<p>Client-server interaction takes place by means of the batch requests defined in this chapter. Because direct access to batch
jobs and queues is limited to batch servers, clients and servers of different implementations can interoperate, since dependencies
on private structures for batch jobs and queues are limited to batch servers. Also, batch servers may be clients of other batch
servers.</p>
<h4><a name="tag_03_01_02"></a>Batch Queues</h4>
<p>Two types of batch queue are described: routing queues and execution queues. When a batch job is placed in a routing queue, it
is a candidate for routing. A batch job is removed from routing queues under the following conditions:</p>
<ul>
<li>
<p>The batch job has been routed to another queue.</p>
</li>
<li>
<p>The batch job has been deleted from the batch queue.</p>
</li>
<li>
<p>The batch job has been aborted.</p>
</li>
</ul>
<p>When a batch job is placed in an execution queue, it is a candidate for execution.</p>
<p>A batch job is removed from an execution queue under the following conditions:</p>
<ul>
<li>
<p>The batch job has been executed and exited.</p>
</li>
<li>
<p>The batch job has been aborted.</p>
</li>
<li>
<p>The batch job has been deleted from the batch queue.</p>
</li>
<li>
<p>The batch job has been moved to another queue.</p>
</li>
</ul>
<p>Access to a batch queue is limited to the batch server that manages the batch queue. Clients never access a batch queue or a
batch job directly, either to read or write information; all client access to batch queues or jobs takes place through batch
servers.</p>
<h4><a name="tag_03_01_03"></a>Batch Job Creation</h4>
<p>When a batch server creates a batch job on behalf of a client, it shall assign a batch job identifier to the job. A batch job
identifier consists of both a sequence number that is unique among the sequence numbers issued by that server and the name of the
server. Since the batch server name is unique within a name space, the job identifier is likewise unique within the name space.</p>
<p>The batch server that creates a batch job shall return the batch server-assigned job identifier to the client that requested the
job creation. If the batch server routes or moves the job to another server, it sends the job identifier with the job. Once
assigned, the job identifier of a batch job shall never change.</p>
<h4><a name="tag_03_01_04"></a>Batch Job Tracking</h4>
<p>Since a batch job may be moved after creation, the batch server name component of the job identifier need not indicate the
location of the job. An implementation may provide a batch job tracking mechanism, in which case the user generally does not need
to know the location of the job. However, an implementation need not provide a batch job tracking mechanism, in which case the user
must find routed jobs by probing the possible destinations.</p>
<h4><a name="tag_03_01_05"></a>Batch Job Routing</h4>
<p>To route a batch job, a batch server either moves the job to some other queue that is managed by the batch server, or requests
that some other batch server accept the job.</p>
<p>Each routing queue has one or more queues to which it can route batch jobs. The batch server administrator creates routing
queues.</p>
<p>A batch server may route a batch job from a routing queue to another routing queue. Batch servers shall prevent or otherwise
handle cases of circular routing paths. As a deferred service, a batch server routes jobs from the routing queues that it manages.
The algorithm by which a batch server selects a batch queue to which to route a batch job is implementation-defined.</p>
<p>A batch job need not be eligible for routing to all the batch queues fed by the routing queue from which it is routed. A batch
server that has been asked to accept the job may reject the request if the job requires resources that are unavailable to that
batch server, or if the client is not authorized to access the batch server.</p>
<p>Batch servers may route high-priority jobs before low-priority jobs, but, on other than overloaded systems, the effect may be
imperceptible to the user. If all the batch servers fed by a routing queue reject requests to accept the job for reasons that are
permanent, the batch server that manages the job shall abort the job. If all or some rejections are temporary, the batch server
should try to route the job again at some later point.</p>
<p>The reasons for rejecting a batch job are implementation-defined. The reasons for which the routing should be retried later and
the reasons for which the job should be aborted are also implementation-defined.</p>
<h4><a name="tag_03_01_06"></a>Batch Job Execution</h4>
<p>To execute a batch job is to create a session leader (a process) that runs the shell program indicated by the <i>Shell_Path</i>
attribute of the job. The script shall be passed to the program as its standard input. An implementation may pass the script to the
program by other implementation-defined means. At the time a batch job begins execution, it is defined to enter the RUNNING state.
The primary program that is executed by a batch job is typically, though not necessarily, a shell program.</p>
<p>A batch server shall execute eligible jobs as a deferred service-no client request is necessary once the batch job is created
and eligible. However, the attributes of a batch job, such as the job hold type, may render the job ineligible. A batch server
shall scan the execution queues that it manages for jobs that are eligible for execution. The algorithm by which the batch server
selects eligible jobs for execution is implementation-defined.</p>
<p>As part of creating the process for the batch job, the batch server shall open the standard output and standard error streams of
the session.</p>
<p>The attributes of a batch job may indicate that the batch server executing the job shall send mail to a list of users at the
time it begins execution of the job.</p>
<h4><a name="tag_03_01_07"></a>Batch Job Exit</h4>
<p>When the session leader of an executing job terminates, the job exits. As part of exiting a batch job, the batch server that
manages the job shall remove the job from the batch queue in which it resides. The server shall transfer output files of the job to
a location described by the attributes of the job.</p>
<p>The attributes of a batch job may indicate that the batch server managing the job shall send mail to a list of users at the time
the job exits.</p>
<h4><a name="tag_03_01_08"></a>Batch Job Abort</h4>
<p>A batch server shall abort jobs for which a required deferred service cannot be performed. The attributes of a batch job may
indicate that the batch server that aborts the job shall send mail to a list of users at the time it aborts the job.</p>
<h4><a name="tag_03_01_09"></a>Batch Authorization</h4>
<p>Clients, such as the batch environment utilities (marked BE), access batch services by means of requests to one or more batch
servers. To acquire the services of any given batch server, the user identifier under which the client runs must be authorized to
use that batch server.</p>
<p>The user with an associated user name that creates a batch job shall own the job and can perform actions such as read, modify,
delete, and move.</p>
<p>A user identifier of the same value at a different host need not be the same user. For example, user name <i>smith</i> at host
<b>alpha</b> may or may not represent the same person as user name <i>smith</i> at host <b>beta</b>. Likewise, the same person may
have access to different user names on different hosts.</p>
<p>An implementation may optionally provide an authorization mechanism that permits one user name to access jobs under another user
name.</p>
<p>A process on a client host may be authorized to run processes under multiple user names at a batch server host. Where
appropriate, the utilities defined in this volume of IEEE&nbsp;Std&nbsp;1003.1-2001 provide a means for a user to choose from among
such user names when creating or modifying a batch job.</p>
<h4><a name="tag_03_01_10"></a>Batch Administration</h4>
<p>The processing of a batch job by a batch server is affected by the attributes of the job. The processing of a batch job may also
be affected by the attributes of the batch queue in which the job resides and by the status of the batch server that manages the
job. See also the Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href="../basedefs/xbd_chap03.html">Chapter 3,
Definitions</a> for batch definitions.</p>
<h4><a name="tag_03_01_11"></a>Batch Notification</h4>
<p>Whereas batch servers are persistent entities, clients are often transient. For example, the <a href=
"../utilities/qsub.html"><i>qsub</i></a> utility creates a batch job and exits. For this reason, batch servers notify users of
batch job events by sending mail to the user that owns the job, or to other designated users.</p>
<h3><a name="tag_03_02"></a>Batch Services</h3>
<p>The presence of Batch Environment option services is indicated by the configuration variable POSIX2_PBS. A conforming batch
server provides services as defined in this section.</p>
<p>A batch server shall provide batch services in two ways:</p>
<ol>
<li>
<p>The batch server provides a service at the request of a client.</p>
</li>
<li>
<p>The batch server provides a deferred service as a result of a change in conditions monitored by the batch server.</p>
</li>
</ol>
<p>If a batch server cannot complete a request, it shall reject the request. If a batch server cannot complete a deferred service
for a batch job, the batch server shall abort the batch job. <a href="#tagtcjh_7">Environment Variable Summary</a> is a summary of
environment variables that shall be supported by an implementation of the batch server and utilities.<br>
</p>
<center><b><a name="tagtcjh_7"></a> Table: Environment Variable Summary</b></center>
<center>
<table border="1" cellpadding="3" align="center">
<tr valign="top">
<th align="center">
<p class="tent"><b>Variable</b></p>
</th>
<th align="center">
<p class="tent"><b>Description</b></p>
</th>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_DPREFIX</i></p>
</td>
<td align="left">
<p class="tent">Defines the directive prefix (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_ENVIRONMENT</i></p>
</td>
<td align="left">
<p class="tent">Batch Job is batch or interactive (see <a href="#tag_03_02_02_01">Batch Job Execution</a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_JOBID</i></p>
</td>
<td align="left">
<p class="tent">The <i>job_identifier</i> attribute of job (see <a href="#tag_03_02_03_08">Queue Batch Job Request</a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_JOBNAME</i></p>
</td>
<td align="left">
<p class="tent">The <i>job_name</i> attribute of job (see <a href="#tag_03_02_03_08">Queue Batch Job Request</a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_HOME</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>HOME</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_HOST</i></p>
</td>
<td align="left">
<p class="tent">Defines the host name of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_LANG</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>LANG</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_LOGNAME</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>LOGNAME</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_MAIL</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>MAIL</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_PATH</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>PATH</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_QUEUE</i></p>
</td>
<td align="left">
<p class="tent">Defines the submit queue of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_SHELL</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>SHELL</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_TZ</i></p>
</td>
<td align="left">
<p class="tent">Defines the <i>TZ</i> of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_O_WORKDIR</i></p>
</td>
<td align="left">
<p class="tent">Defines the working directory of the batch client (see <a href="qsub.html"><i>qsub</i></a> )</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>PBS_QUEUE</i></p>
</td>
<td align="left">
<p class="tent">Defines the initial execution queue (see <a href="#tag_03_02_02_01">Batch Job Execution</a> )</p>
</td>
</tr>
</table>
</center>
<h4><a name="tag_03_02_01"></a>Batch Job States</h4>
<p>A batch job shall always be in one of the following states: QUEUED, RUNNING, HELD, WAITING, EXITING, or TRANSITING. The state of
a batch job determines the types of requests that the batch server that manages the batch job can accept for the batch job. A batch
server shall change the state of a batch job either in response to service requests from clients or as a result of deferred
services, such as job execution or job routing.</p>
<p>A batch job that is in the QUEUED state resides in a queue but is still pending either execution or routing, depending on the
queue type.</p>
<p>A batch server that queues a batch job in a routing queue shall put the batch job in the QUEUED state. A batch server that puts
a batch job in an execution queue, but has not yet executed the batch job, shall put the batch job in the QUEUED state. A batch job
that resides in an execution queue and is executing is defined to be in the RUNNING state. While a batch job is in the RUNNING
state, a session leader is associated with the batch job.</p>
<p>A batch job that resides in an execution queue, but is ineligible to run because of a hold attribute, is defined to be in the
HELD state.</p>
<p>A batch job that is not held, but must wait until a future date and time before executing, is defined to be in the WAITING
state.</p>
<p>When the session leader associated with a running job exits, the batch job shall be placed in the EXITING state.</p>
<p>A batch job for which the session leader has terminated is defined to be in the EXITING state, and the batch server that manages
such a batch job cannot accept job modification requests that affect the batch job. While a batch job is in the EXITING state, the
batch server that manages the batch job is staging output files and notifying clients of job completion. Once a batch job has
exited, it no longer exists as an object managed by a batch server.</p>
<p>A batch job that is being moved from a routing queue to another queue is defined to be in the TRANSITING state.</p>
<p>When a batch job in a routing queue has been selected to be moved to a new destination, then the batch job shall be in either
the QUEUED state or the TRANSITING state, depending on the batch server implementation.</p>
<p>Batch jobs with either an <i>Execution_Time</i> attribute value set in the future or a <i>Hold_Types</i> attribute of value not
equal to NO_HOLD, or both, may be routed or held in the routing queue. The treatment of jobs with the <i>Execution_Time</i> or
<i>Hold_Types</i> attributes in a routing queue is implementation-defined.</p>
<p>When a batch job in a routing queue has not been selected to be moved to a new destination and the batch job has a
<i>Hold_Types</i> attribute value of other than NO_HOLD, then the job should be in the HELD state. <basefont size="2"></p>
<dl>
<dt><b>Note:</b></dt>
<dd>The effect of a hold upon a batch job in a routing queue is implementation-defined. The implementation should use the state
that matches whether the batch job can route with a hold or not.</dd>
</dl>
<basefont size="3">
<p>When a batch job in a routing queue has not been selected to be moved to a new destination and the batch job has:</p>
<ul>
<li>
<p>A <i>Hold_Types</i> attribute value of NO_HOLD</p>
</li>
<li>
<p>An <i>Execution_Time</i> attribute in the past</p>
</li>
</ul>
<p>then the batch job shall be in the QUEUED state.</p>
<p>When a batch job in a routing queue has not been selected to be moved to a new destination and the batch job has:</p>
<ul>
<li>
<p>A <i>Hold_Types</i> attribute value of NO_HOLD</p>
</li>
<li>
<p>An <i>Execution_Time</i> attribute in the future</p>
</li>
</ul>
<p>then the batch job may be in the WAITING state. <basefont size="2"></p>
<dl>
<dt><b>Note:</b></dt>
<dd>The effect of a future execution time upon a batch job in a routing queue is implementation-defined. The implementation should
use the state that matches whether the batch job can route with a hold or not.</dd>
</dl>
<basefont size="3">
<p><a href="#tagtcjh_8">Next State Table</a> describes the next state of a batch job, given the current state of the batch job and
the type of request. <a href="#tagtcjh_9">Results/Output Table</a> describes the response of a batch server to a request, given the
current state of the batch job and the type of request.</p>
<h4><a name="tag_03_02_02"></a>Deferred Batch Services</h4>
<p>This section describes the deferred services performed by batch servers: job execution, job routing, job exit, job abort, and
the rerunning of jobs after a restart.</p>
<h5><a name="tag_03_02_02_01"></a>Batch Job Execution</h5>
<p>To execute a batch job is to create a session leader (a process) that runs the shell program indicated by the
<i>Shell_Path_List</i> attribute of the batch job. The script is passed to the program as its standard input. An implementation may
pass the script to the program by other implementation-defined means. At the time a batch job begins execution, it is defined to
enter the RUNNING state.<br>
</p>
<center><b><a name="tagtcjh_8"></a> Table: Next State Table</b></center>
<center>
<table border="1" cellpadding="3" align="center">
<tr valign="top">
<th align="center">
<p class="tent"><b>&nbsp;</b></p>
</th>
<th colspan="7" align="center">
<p class="tent"><b>Current State</b></p>
</th>
</tr>
<tr valign="top">
<th align="center">
<p class="tent"><b>&nbsp;</b></p>
</th>
<th colspan="7" align="center">
<p class="tent"><b>_</b></p>
</th>
</tr>
<tr valign="top">
<th align="center">
<p class="tent"><b>Request Type</b></p>
</th>
<th align="center">
<p class="tent"><b>X</b></p>
</th>
<th align="center">
<p class="tent"><b>Q</b></p>
</th>
<th align="center">
<p class="tent"><b>R</b></p>
</th>
<th align="center">
<p class="tent"><b>H</b></p>
</th>
<th align="center">
<p class="tent"><b>W</b></p>
</th>
<th align="center">
<p class="tent"><b>E</b></p>
</th>
<th align="center">
<p class="tent"><b>T</b></p>
</th>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Queue Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Modify Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Delete Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Message Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Rerun Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Signal Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Status Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Queue Status Request</i></p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Status Request</i></p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Select Batch Jobs Request</i></p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Move Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Hold Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">R/H</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Release Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">Q/W/H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Shutdown Request</i></p>
</td>
<td align="center">
<p class="tent">X</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Locate Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">Q</p>
</td>
<td align="center">
<p class="tent">R</p>
</td>
<td align="center">
<p class="tent">H</p>
</td>
<td align="center">
<p class="tent">W</p>
</td>
<td align="center">
<p class="tent">E</p>
</td>
<td align="center">
<p class="tent">T</p>
</td>
</tr>
</table>
</center>
<h5><a name="tag_03_02_02_02"></a>Legend</h5>
<dl compact>
<dt>X</dt>
<dd>Nonexistent</dd>
<dt>Q</dt>
<dd>QUEUED</dd>
<dt>R</dt>
<dd>RUNNING</dd>
<dt>H</dt>
<dd>HELD</dd>
<dt>W</dt>
<dd>WAITING</dd>
<dt>E</dt>
<dd>EXITING</dd>
<dt>T</dt>
<dd>TRANSITING</dd>
<dt>e</dt>
<dd>Error</dd>
</dl>
<p>A batch server that has an execution queue containing jobs is said to own the queue and manage the batch jobs in that queue. A
batch server that has been started shall execute the batch jobs in the execution queues owned by the batch server. The batch server
shall schedule for execution those jobs in the execution queues that are in the QUEUED state. The algorithm for scheduling jobs is
implementation-defined.</p>
<p>A batch server that executes a batch job shall create, in the environment of the session leader of the batch job, an environment
variable named <i>PBS_ENVIRONMENT ,</i> the value of which is the string PBS_BATCH encoded in the portable character set.</p>
<p>A batch server that executes a batch job shall create, in the environment of the session leader of the batch job, an environment
variable named <i>PBS_QUEUE ,</i> the value of which is the name of the execution queue of the batch job encoded in the portable
character set.</p>
<p>To rerun a batch job is to requeue a batch job that is currently executing and then kill the session leader of the executing job
by sending a SIGKILL prior to completion; see <a href="#tag_03_02_03_11">Rerun Batch Job Request</a> . A batch server that reruns a
batch job shall append the standard output and standard error files of the batch job to the corresponding files of the previous
execution, if they exist, with appropriate annotation. If either file does not exist, that file shall be created as in normal
execution.<br>
</p>
<center><b><a name="tagtcjh_9"></a> Table: Results/Output Table</b></center>
<center>
<table border="1" cellpadding="3" align="center">
<tr valign="top">
<th align="center">
<p class="tent"><b>&nbsp;</b></p>
</th>
<th colspan="7" align="center">
<p class="tent"><b>Current State</b></p>
</th>
</tr>
<tr valign="top">
<th align="center">
<p class="tent"><b>&nbsp;</b></p>
</th>
<th colspan="7" align="center">
<p class="tent"><b>_</b></p>
</th>
</tr>
<tr valign="top">
<th align="center">
<p class="tent"><b>Request Type</b></p>
</th>
<th align="center">
<p class="tent"><b>X</b></p>
</th>
<th align="center">
<p class="tent"><b>Q</b></p>
</th>
<th align="center">
<p class="tent"><b>R</b></p>
</th>
<th align="center">
<p class="tent"><b>H</b></p>
</th>
<th align="center">
<p class="tent"><b>W</b></p>
</th>
<th align="center">
<p class="tent"><b>E</b></p>
</th>
<th align="center">
<p class="tent"><b>T</b></p>
</th>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Queue Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Modify Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Delete Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Message Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Rerun Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Signal Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Status Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Queue Status Request</i></p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Status Request</i></p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Select Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Move Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Hold Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Release Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Shutdown Request</i></p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Locate Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">e</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
<td align="center">
<p class="tent">O</p>
</td>
</tr>
</table>
</center>
<h5><a name="tag_03_02_02_03"></a>Legend</h5>
<dl compact>
<dt>O</dt>
<dd>OK</dd>
<dt>e</dt>
<dd>Error message</dd>
</dl>
<p>The execution of a batch job by a batch server shall be controlled by job, queue, and server attributes, as defined in this
section.</p>
<h5><a name="tag_03_02_02_04"></a>Account_Name Attribute</h5>
<p>Batch accounting is an optional feature of batch servers. If a batch server implements accounting, the statements in this
section apply and the configuration variable POSIX2_PBS_ACCOUNTING shall be set to 1.</p>
<p>A batch server that executes a batch job shall charge the account named in the <i>Account_Name</i> attribute of the batch job
for resources consumed by the batch job.</p>
<p>If the <i>Account_Name</i> attribute of the batch job is absent from the batch job attribute list or is altered while the batch
job is in execution, the batch server action is implementation-defined.</p>
<h5><a name="tag_03_02_02_05"></a>Checkpoint Attribute</h5>
<p>Batch checkpointing is an optional feature of batch servers. If a batch server implements checkpointing, the statements in this
section apply and the configuration variable POSIX2_PBS_CHECKPOINT shall be set to 1.</p>
<p>There are two attributes associated with the checkpointing feature: <i>Checkpoint</i> and <i>Minimum_Cpu_Interval</i>.
<i>Checkpoint</i> is a batch job attribute, while <i>Minimum_Cpu_Interval</i> is a queue attribute. An implementation that does not
support checkpointing shall support the <i>Checkpoint</i> job attribute to the extent that the batch server shall maintain and pass
this attribute to other servers.</p>
<p>The behavior of a batch server that executes a batch job for which the value of the <i>Checkpoint</i> attribute is
CHECKPOINT_UNSPECIFIED is implementation-defined. A batch server that executes a batch job for which the value of the
<i>Checkpoint</i> attribute is NO_CHECKPOINT shall not checkpoint the batch job.</p>
<p>A batch server that executes a batch job for which the value of the <i>Checkpoint</i> attribute is CHECKPOINT_AT_SHUTDOWN shall
checkpoint the batch job only when the batch server accepts a request to shut down during the time when the batch job is in the
RUNNING state.</p>
<p>A batch server that executes a batch job for which the value of the <i>Checkpoint</i> attribute is
CHECKPOINT_AT_MIN_CPU_INTERVAL shall checkpoint the batch job at the interval specified by the <i>Minimum_Cpu_Interval</i>
attribute of the queue for which the batch job has been selected. The <i>Minimum_Cpu_Interval</i> attribute shall be specified in
units of CPU minutes.</p>
<p>A batch server that executes a batch job for which the value of the <i>Checkpoint</i> attribute is an unsigned integer shall
checkpoint the batch job at an interval that is the value of either the <i>Checkpoint</i> attribute, or the
<i>Minimum_Cpu_Interval</i> attribute of the queue for which the batch job has been selected, whichever is greater. Both intervals
shall be in units of CPU minutes. When the <i>Minimum_Cpu_Interval</i> attribute is greater than the <i>Checkpoint</i> attribute,
the batch job shall write a warning message to the standard error stream of the batch job.</p>
<h5><a name="tag_03_02_02_06"></a>Error_Path Attribute</h5>
<p>The <i>Error_Path</i> attribute of a running job cannot be changed by a <i>Modify Batch Job Request</i>. When the
<i>Join_Path</i> attribute of the batch job is set to the value FALSE and the <i>Keep_Files</i> attribute of the batch job does not
contain the value KEEP_STD_ERROR, a batch server that executes a batch job shall perform one of the following actions:</p>
<ul>
<li>
<p>Set the standard error stream of the session leader of the batch job to the path described by the value of the <i>Error_Path</i>
attribute of the batch job.</p>
</li>
<li>
<p>Buffer the standard error of the session leader of the batch job until completion of the batch job, and when the batch job exits
return the contents to the destination described by the value of the <i>Error_Path</i> attribute of the batch job.</p>
</li>
</ul>
<p>Applications shall not rely on having access to the standard error of a batch job prior to the completion of the batch job.</p>
<p>When the <i>Error_Path</i> attribute does not specify a host name, then the batch server shall retain the standard error of the
batch job on the host of execution.</p>
<p>When the <i>Error_Path</i> attribute does specify a host name and the <i>Keep_Files</i> attribute does not contain the value
KEEP_STD_ERROR, then the final destination of the standard error of the batch job shall be on the host whose host name is
specified.</p>
<p>If the path indicated by the value of the <i>Error_Path</i> attribute of the batch job is a relative path, the batch server
shall expand the path relative to the home directory of the user on the host to which the file is being returned.</p>
<p>When the batch server buffers the standard error of the batch job and the file cannot be opened for write upon completion of the
batch job, then the server shall place the standard error in an implementation-defined location and notify the user of the location
via mail. It shall be possible for the user to process this mail using the <a href="../utilities/mailx.html"><i>mailx</i></a>
utility.</p>
<p>If a batch server that does not buffer the standard error cannot open the standard error path of the batch job for write access,
then the batch server shall abort the batch job.</p>
<h5><a name="tag_03_02_02_07"></a>Execution_Time Attribute</h5>
<p>A batch server shall not execute a batch job before the time represented by the value of the <i>Execution_Time</i> attribute of
the batch job. The <i>Execution_Time</i> attribute is defined in seconds since the Epoch.</p>
<h5><a name="tag_03_02_02_08"></a>Hold_Types Attribute</h5>
<p>A batch server shall support the following hold types:</p>
<dl compact>
<dt><tt>s</tt></dt>
<dd>Can be set or released by a user with at least a privilege level of batch administrator (SYSTEM).</dd>
<dt><tt>o</tt></dt>
<dd>Can be set or released by a user with at least a privilege level of batch operator (OPERATOR).</dd>
<dt><tt>u</tt></dt>
<dd>Can be set or released by the user with at least a privilege level of user, where the user is defined in the <i>Job_Owner</i>
attribute (USER).</dd>
<dt><tt>n</tt></dt>
<dd>Indicates that none of the <i>Hold_Types</i> attributes are set (NO_HOLD).</dd>
</dl>
<p>An implementation may define other hold types. Any additional hold types, how they are specified, their internal representation,
their behavior, and how they affect the behavior of other utilities are implementation-defined.</p>
<p>The value of the <i>Hold_Types</i> attribute shall be the union of the valid hold types ( <tt>'s'</tt> , <tt>'o'</tt> ,
<tt>'u'</tt> , and any implementation-defined hold types), or <tt>'n'</tt> .</p>
<p>A batch server shall not execute a batch job if the <i>Hold_Types</i> attribute of the batch job has a value other than NO_HOLD.
If the <i>Hold_Types</i> attribute of the batch job has a value other than NO_HOLD, the batch job shall be in the HELD state.</p>
<h5><a name="tag_03_02_02_09"></a>Job_Owner Attribute</h5>
<p>The <i>Job_Owner</i> attribute consists of a pair of user name and host name values of the form:</p>
<blockquote>
<pre>
<tt>username@hostname
</tt>
</pre>
</blockquote>
<p>A batch server that accepts a <i>Queue Batch Job Request</i> shall set the <i>Job_Owner</i> attribute to a string that is the
<i>username</i>@ <i>hostname</i> of the user who submitted the job.</p>
<h5><a name="tag_03_02_02_10"></a>Join_Path Attribute</h5>
<p>A batch server that executes a batch job for which the value of the <i>Join_Path</i> attribute is TRUE shall ignore the value of
the <i>Error_Path</i> attribute and merge the standard error of the batch job with the standard output of the batch job.</p>
<h5><a name="tag_03_02_02_11"></a>Keep_Files Attribute</h5>
<p>A batch server that executes a batch job for which the value of the <i>Keep_Files</i> attribute includes the value
KEEP_STD_OUTPUT shall retain the standard output of the batch job on the host where execution occurs. The standard output shall be
retained in the home directory of the user under whose user ID the batch job is executed and the filename shall be the default
filename for the standard output as defined under the <b>-o</b> option of the <a href="../utilities/qsub.html"><i>qsub</i></a>
utility. The <i>Output_Path</i> attribute is not modified.</p>
<p>A batch server that executes a batch job for which the value of the <i>Keep_Files</i> attribute includes the value
KEEP_STD_ERROR shall retain the standard error of the batch job on the host where execution occurs. The standard error shall be
retained in the home directory of the user under whose user ID the batch job is executed and the filename shall be the default
filename for standard error as defined under the <b>-e</b> option of the <a href="../utilities/qsub.html"><i>qsub</i></a> utility.
The <i>Error_Path</i> attribute is not modified.</p>
<p>A batch server that executes a batch job for which the value of the <i>Keep_Files</i> attribute includes values other than
KEEP_STD_OUTPUT and KEEP_STD_ERROR shall retain these other files on the host where execution occurs. These files (with
implementation-defined names) shall be retained in the home directory of the user under whose user identifier the batch job is
executed.</p>
<h5><a name="tag_03_02_02_12"></a>Mail_Points and Mail_Users Attributes</h5>
<p>A batch server that executes a batch job for which one of the values of the <i>Mail_Points</i> attribute is the value
MAIL_AT_BEGINNING shall send a mail message to each user account listed in the <i>Mail_Users</i> attribute of the batch job.</p>
<p>The mail message shall contain at least the batch job identifier, queue, and server at which the batch job currently resides,
and the <i>Job_Owner</i> attribute.</p>
<h5><a name="tag_03_02_02_13"></a>Output_Path Attribute</h5>
<p>The <i>Output_Path</i> attribute of a running job cannot be changed by a <i>Modify Batch Job Request</i>. When the
<i>Keep_Files</i> attribute of the batch job does not contain the value KEEP_STD_OUTPUT, a batch server that executes a batch job
shall either:</p>
<ul>
<li>
<p>Set the standard output stream of the session leader of the batch job to the destination described by the value of the
<i>Output_Path</i> attribute of the batch job.</p>
<p>or:</p>
</li>
<li>
<p>Buffer the standard output of the session leader of the batch job until completion of the batch job, and when the batch job
exits return the contents to the destination described by the value of the <i>Output_Path</i> attribute of the batch job.</p>
</li>
</ul>
<p>When the <i>Output_Path</i> attribute does not specify a host name, then the batch server shall retain the standard output of
the batch job on the host of execution.</p>
<p>When the <i>Keep_Files</i> attribute does not contain the value KEEP_STD_OUTPUT and the <i>Output_Path</i> attribute does
specify a host name, then the final destination of the standard output of the batch job shall be on the host specified.</p>
<p>If the path specified in the <i>Output_Path</i> attribute of the batch job is a relative path, the batch server shall expand the
path relative to the home directory of the user on the host to which the file is being returned.</p>
<p>Whether or not the batch server buffers the standard output of the batch job until completion of the batch job is
implementation-defined. Applications shall not rely on having access to the standard output of a batch job prior to the completion
of the batch job.</p>
<p>When the batch server does buffer the standard output of the batch job and the file cannot be opened for write upon completion
of the batch job, then the batch server shall place the standard output in an implementation-defined location and notify the user
of the location via mail. It shall be possible for the user to process this mail using the <a href=
"../utilities/mailx.html"><i>mailx</i></a> utility.</p>
<p>If a batch server that does not buffer the standard output cannot open the standard output path of the batch job for write
access, then the batch server shall abort the batch job.</p>
<h5><a name="tag_03_02_02_14"></a>Priority Attribute</h5>
<p>A batch server implementation may choose to preferentially execute a batch job based on the <i>Priority</i> attribute. The
interpretation of the batch job <i>Priority</i> attribute by a batch server is implementation-defined. If an implementation uses
the <i>Priority</i> attribute, it shall interpret larger values of the <i>Priority</i> attribute to mean the batch job shall be
preferentially selected for execution.</p>
<h5><a name="tag_03_02_02_15"></a>Rerunable Attribute</h5>
<p>A batch job that began execution but did not complete, because the batch server either shut down or terminated abnormally, shall
be requeued if the <i>Rerunable</i> attribute of the batch job has the value TRUE.</p>
<p>If a batch job, which was requeued after beginning execution but prior to completion, has a valid checkpoint file and the batch
server supports checkpointing, then the batch job shall be restarted from the last valid checkpoint.</p>
<p>If the batch job cannot be restarted from a checkpoint, then when a batch job has a <i>Rerunable</i> attribute value of TRUE and
was requeued after beginning execution but prior to completion, the batch server shall place the batch job into execution at the
beginning of the job.</p>
<p>When a batch job has a <i>Rerunable</i> attribute value other than TRUE and was requeued after beginning execution but prior to
completion, and the batch job cannot be restarted from a checkpoint, then the batch server shall abort the batch job.</p>
<h5><a name="tag_03_02_02_16"></a>Resource_List Attribute</h5>
<p>A batch server that executes a batch job shall establish the resource limits of the session leader of the batch job according to
the values of the <i>Resource_List</i> attribute of the batch job. Resource limits shall be enforced by an implementation-defined
method.</p>
<h5><a name="tag_03_02_02_17"></a>Shell_Path_List Attribute</h5>
<p>The <i>Shell_Path_List</i> job attribute consists of a list of pairs of pathname and host name values. The host name component
can be omitted, in which case the pathname serves as the default pathname when a batch server cannot find the name of the host on
which it is running in the list.</p>
<p>A batch server that executes a batch job shall select, from the value of the <i>Shell_Path_List</i> attribute of the batch job,
a pathname where the shell to execute the batch job shall be found. The batch server shall select the pathname, in order of
preference, according to the following methods:</p>
<ul>
<li>
<p>Select the pathname that contains the name of the host on which the batch server is running.</p>
</li>
<li>
<p>Select the pathname for which the host name has been omitted.</p>
</li>
<li>
<p>Select the pathname for the login shell of the user under which the batch job is to execute.</p>
</li>
</ul>
<p>If the shell path value selected is an invalid pathname, the batch server shall abort the batch job.</p>
<p>If the value of the selected pathname from the <i>Shell_Path_List</i> attribute of the batch job represents a partial path, the
batch server shall expand the path relative to a path that is implementation-defined.</p>
<p>The batch server that executes the batch job shall execute the program that was selected from the <i>Shell_Path_List</i>
attribute of the batch job. The batch server shall pass the path to the script of the batch job as the first argument to the shell
program.</p>
<h5><a name="tag_03_02_02_18"></a>User_List Attribute</h5>
<p>The <i>User_List</i> job attribute consists of a list of pairs of user name and host name values. The host name component can be
omitted, in which case the user name serves as a default when a batch server cannot find the name of the host on which it is
running in the list.</p>
<p>A batch server that executes a batch job shall select, from the value of the <i>User_List</i> attribute of the batch job, a user
name under which to create the session leader. The server shall select the user name, in order of preference, according to the
following methods:</p>
<ul>
<li>
<p>Select the user name of a value that contains the name of the host on which the batch server executes.</p>
</li>
<li>
<p>Select the user name of a value for which the host name has been omitted.</p>
</li>
<li>
<p>Select the user name from the <i>Job_Owner</i> attribute of the batch job.</p>
</li>
</ul>
<h5><a name="tag_03_02_02_19"></a>Variable_List Attribute</h5>
<p>A batch server that executes a batch job shall create, in the environment of the session leader of the batch job, each
environment variable listed in the <i>Variable_List</i> attribute of the batch job, and set the value of each such environment
variable to that of the corresponding variable in the variable list.</p>
<h5><a name="tag_03_02_02_20"></a>Batch Job Routing</h5>
<p>To route a batch job is to select a queue from a list and move the batch job to that queue.</p>
<p>A batch server that has routing queues, which have been started, shall route the jobs in the routing queues owned by the batch
server. A batch server may delay the routing of a batch job. The algorithm for selecting a batch job and the queue to which it will
be routed is implementation-defined.</p>
<p>When a routing queue has multiple possible destinations specified, then the precedence of the destinations is
implementation-defined.</p>
<p>A batch server that routes a batch job to a queue at another server shall move the batch job into the target queue with a
<i>Queue Batch Job Request</i>.</p>
<p>If the target server rejects the <i>Queue Batch Job Request</i>, the routing server shall retry routing the batch job or abort
the batch job. A batch server that retries failed routings shall provide a means for the batch administrator to specify the number
of retries and the minimum period of time between retries. The means by which an administrator specifies the number of retries and
the delay between retries is implementation-defined. When the number of retries specified by the batch administrator has been
exhausted, the batch server shall abort the batch job and perform the functions of <i>Batch Job Exit</i>; see <a href=
"#tag_03_02_02_21">Batch Job Exit</a> .</p>
<h5><a name="tag_03_02_02_21"></a>Batch Job Exit</h5>
<p>For each job in the EXITING state, the batch server that exited the batch job shall perform the following deferred services in
the order specified:</p>
<ol>
<li>
<p>If buffering standard error, move that file into the location specified by the <i>Error_Path</i> attribute of the batch job.</p>
</li>
<li>
<p>If buffering standard output, move that file into the location specified by the <i>Output_Path</i> attribute of the batch
job.</p>
</li>
<li>
<p>If the <i>Mail_Points</i> attribute of the batch job includes MAIL_AT_EXIT, send mail to the users listed in the
<i>Mail_Users</i> attribute of the batch job. The mail message shall contain at least the batch job identifier, queue, and server
at which the batch job currently resides, and the <i>Job_Owner</i> attribute.</p>
</li>
<li>
<p>Remove the batch job from the queue.</p>
</li>
</ol>
<p>If a batch server that buffers the standard error output cannot return the standard error file to the standard error path at the
time the batch job exits, the batch server shall do one of the following:</p>
<ul>
<li>
<p>Mail the standard error file to the batch job owner.</p>
</li>
<li>
<p>Save the standard error file and mail the location and name of the file where the standard error is stored to the batch job
owner.</p>
</li>
<li>
<p>Save the standard error file and notify the user by other implementation-defined means.</p>
</li>
</ul>
<p>If a batch server that buffers the standard output cannot return the standard output file to the standard output path at the
time the batch job exits, the batch server shall do one of the following:</p>
<ul>
<li>
<p>Mail the standard output file to the batch job owner.</p>
</li>
<li>
<p>Save the standard output file and mail the location and name of the file where the standard output is stored to the batch job
owner.</p>
</li>
<li>
<p>Save the standard output file and notify the user by other implementation-defined means.</p>
</li>
</ul>
<p>At the conclusion of job exit processing, the batch job is no longer managed by a batch server.</p>
<h5><a name="tag_03_02_02_22"></a>Batch Server Restart</h5>
<p>A batch server that has been either shutdown or terminated abnormally, and has returned to operation, is said to have
``restarted''.</p>
<p>Upon restarting, a batch server shall requeue those jobs managed by the batch server that were in the RUNNING state at the time
the batch server shut down and for which the <i>Rerunable</i> attribute of the batch job has the value TRUE.</p>
<p>Queues are defined to be non-volatile. A batch server shall store the content of queues that it controls in such a way that
server and system shutdowns do not erase the content of the queues.</p>
<h5><a name="tag_03_02_02_23"></a>Batch Job Abort</h5>
<p>A batch server that cannot perform a deferred service for a batch job shall abort the batch job.</p>
<p>A batch server that aborts a batch job shall perform the following services:</p>
<ul>
<li>
<p>Delete the batch job from the queue in which it resides.</p>
</li>
<li>
<p>If the <i>Mail_Points</i> attribute of the batch job includes the value MAIL_AT_ABORT, send mail to the users listed in the
value of the <i>Mail_Users</i> attribute of the job. The mail message shall contain at least the batch job identifier, queue, and
server at which the batch job currently resides, the <i>Job_Owner</i> attribute, and the reason for the abort.</p>
</li>
<li>
<p>If the batch job was in the RUNNING state, terminate the session leader of the executing job by sending the session leader a
SIGKILL, place the batch job in the EXITING state, and perform the actions of <i>Batch Job Exit</i>.</p>
</li>
</ul>
<h4><a name="tag_03_02_03"></a>Requested Batch Services</h4>
<p>This section describes the services provided by batch servers in response to requests from clients. <a href="#tagtcjh_10">Batch
Services Summary</a> summarizes the current set of batch service requests and for each gives its type (deferred or not) and whether
it is an optional function.<br>
</p>
<center><b><a name="tagtcjh_10"></a> Table: Batch Services Summary</b></center>
<center>
<table border="1" cellpadding="3" align="center">
<tr valign="top">
<th align="center">
<p class="tent"><b>Batch Service</b></p>
</th>
<th align="center">
<p class="tent"><b>Deferred</b></p>
</th>
<th align="center">
<p class="tent"><b>Optional</b></p>
</th>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Execution</i></p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Routing</i></p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Exit</i></p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Server Restart</i></p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Abort</i></p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Delete Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Hold Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Message Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Job Status Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Locate Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Modify Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Move Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Queue Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Batch Queue Status Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Release Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Rerun Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Select Batch Jobs Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Shutdown Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Server Status Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Signal Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
</tr>
<tr valign="top">
<td align="left">
<p class="tent"><i>Track Batch Job Request</i></p>
</td>
<td align="center">
<p class="tent">No</p>
</td>
<td align="center">
<p class="tent">Yes</p>
</td>
</tr>
</table>
</center>
<p>If a request is rejected because the batch client is not authorized to perform the action, the batch server shall return the
same status as when the batch job does not exist.</p>
<h5><a name="tag_03_02_03_01"></a>Delete Batch Job Request</h5>
<p>A batch job is defined to have been deleted when it has been removed from the queue in which it resides and not instantiated in
another queue. A client requests that the server that manages a batch job delete the batch job. Such a request is called a
<i>Delete Batch Job Request</i>.</p>
<p>A batch server shall reject a <i>Delete Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to delete the designated job.</p>
</li>
<li>
<p>The designated job is not managed by the batch server.</p>
</li>
<li>
<p>The designated job is in a state inconsistent with the delete request.</p>
</li>
</ul>
<p>A batch server may reject a <i>Delete Batch Job Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server requested to delete a batch job shall delete the batch job if the batch job exists and is not in the EXITING
state.</p>
<p>A batch server that deletes a batch job in the RUNNING state shall send a SIGKILL signal to the session leader of the batch job.
It is implementation-defined whether additional signals are sent to the session leader of the job prior to sending the SIGKILL
signal.</p>
<p>A batch server that deletes a batch job in the RUNNING state shall place the batch job in the EXITING state after it has killed
the session leader of the batch job and shall perform the actions of <i>Batch Job Exit</i>.</p>
<h5><a name="tag_03_02_03_02"></a>Hold Batch Job Request</h5>
<p>A batch client can request that the batch server add one or more holds to a batch job. Such a request is called a <i>Hold Batch
Job Request</i>.</p>
<p>A batch server shall reject a <i>Hold Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The batch server does not support one or more of the requested holds to be added to the batch job.</p>
</li>
<li>
<p>The user of the batch client is not authorized to add one or more of the requested holds to the batch job.</p>
</li>
<li>
<p>The batch server does not manage the specified job.</p>
</li>
<li>
<p>The designated job is in the EXITING state.</p>
</li>
</ul>
<p>A batch server may reject a <i>Hold Batch Job Request</i> for other implementation-defined reasons. The method used to determine
whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Hold Batch Job Request</i> for a batch job in the RUNNING state shall place a hold on the batch
job. The effects, if any, the hold will have on a batch job in the RUNNING state are implementation-defined.</p>
<p>A batch server that accepts a <i>Hold Batch Job Request</i> shall add each type of hold listed in the <i>Hold Batch Job
Request</i>, that is not already present, to the value of the <i>Hold_Types</i> attribute of the batch job.</p>
<h5><a name="tag_03_02_03_03"></a>Batch Job Message Request</h5>
<p><i>Batch Job Message Request</i> is an optional feature of batch servers. If an implementation supports <i>Batch Job Message
Request</i>, the statements in this section apply and the configuration variable POSIX2_PBS_MESSAGE shall be set to 1.</p>
<p>A batch client can request that a batch server write a message into certain output files of a batch job. Such a request is
called a <i>Batch Job Message Request</i>.</p>
<p>A batch server shall reject a <i>Batch Job Message Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The batch server does not support sending messages to jobs.</p>
</li>
<li>
<p>The user of the batch client is not authorized to post a message to the designated job.</p>
</li>
<li>
<p>The designated job does not exist on the batch server.</p>
</li>
<li>
<p>The designated job is not in the RUNNING state.</p>
</li>
</ul>
<p>A batch server may reject a <i>Batch Job Message Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Batch Job Message Request</i> shall write the message sent by the batch client into the files
indicated by the batch client.</p>
<h5><a name="tag_03_02_03_04"></a>Batch Job Status Request</h5>
<p>A batch client can request that a batch server respond with the status and attributes of a batch job. Such a request is called a
<i>Batch Job Status Request</i>.</p>
<p>A batch server shall reject a <i>Batch Job Status Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to query the status of the designated job.</p>
</li>
<li>
<p>The designated job is not managed by the batch server.</p>
</li>
</ul>
<p>A batch server may reject a <i>Batch Job Status Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Batch Job Status Request</i> shall return a <i>Batch Job Status Message</i> to the batch
client.</p>
<p>A batch server may return other information in response to a <i>Batch Job Status Request</i>.</p>
<h5><a name="tag_03_02_03_05"></a>Locate Batch Job Request</h5>
<p><i>Locate Batch Job Request</i> is an optional feature of batch servers. If an implementation supports <i>Locate Batch Job
Request</i>, the statements in this section apply and the configuration variable POSIX2_PBS_LOCATE shall be set to 1.</p>
<p>A batch client can ask a batch server to respond with the location of a batch job that was created by the batch server. Such a
request is called a <i>Locate Batch Job Request</i>.</p>
<p>A batch server that accepts a <i>Locate Batch Job Request</i> shall return a <i>Batch Job Location Message</i> to the batch
client.</p>
<p>A batch server may reject a <i>Locate Batch Job Request</i> for a batch job that was not created by that server.</p>
<p>A batch server may reject a <i>Locate Batch Job Request</i> for a batch job that is no longer managed by that server; that is,
for a batch job that is not in a queue owned by that server.</p>
<p>A batch server may reject a <i>Locate Batch Job Request</i> for other implementation-defined reasons.</p>
<h5><a name="tag_03_02_03_06"></a>Modify Batch Job Request</h5>
<p>Batch clients modify (alter) the attributes of a batch job by making a request to the server that manages the batch job. Such a
request is called a <i>Modify Batch Job Request</i>.</p>
<p>A batch server shall reject a <i>Modify Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to make the requested modification to the batch job.</p>
</li>
<li>
<p>The designated job is not managed by the batch server.</p>
</li>
<li>
<p>The requested modification is inconsistent with the state of the batch job.</p>
</li>
<li>
<p>An unrecognized resource is requested for a batch job in an execution queue.</p>
</li>
</ul>
<p>A batch server may reject a <i>Modify Batch Job Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Modify Batch Job Request</i> shall modify all the specified attributes of the batch job. A
batch server that rejects a <i>Modify Batch Job Request</i> shall modify none of the attributes of the batch job.</p>
<p>If the servicing by a batch server of an otherwise valid request would result in no change, then the batch server shall indicate
successful completion of the request.</p>
<h5><a name="tag_03_02_03_07"></a>Move Batch Job Request</h5>
<p>A batch client can request that a batch server move a batch job to another destination. Such a request is called a <i>Move Batch
Job Request</i>.</p>
<p>A batch server shall reject a <i>Move Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to remove the designated job from the queue in which the batch job resides.</p>
</li>
<li>
<p>The user of the batch client is not authorized to move the designated job to the destination.</p>
</li>
<li>
<p>The designated job is not managed by the batch server.</p>
</li>
<li>
<p>The designated job is in the EXITING state.</p>
</li>
<li>
<p>The destination is inaccessible.</p>
</li>
</ul>
<p>A batch server can reject a <i>Move Batch Job Request</i> for other implementation-defined reasons. The method used to determine
whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Move Batch Job Request</i> shall perform the following services:</p>
<ul>
<li>
<p>Queue the designated job at the destination.</p>
</li>
<li>
<p>Remove the designated job from the queue in which the batch job resides.</p>
</li>
</ul>
<p>If the destination resides on another batch server, the batch server shall queue the batch job at the destination by sending a
<i>Queue Batch Job Request</i> to the other server. If the <i>Queue Batch Job Request</i> fails, the batch server shall reject the
<i>Move Batch Job Request</i>. If the <i>Queue Batch Job Request</i> succeeds, the batch server shall remove the batch job from its
queue.</p>
<p>The batch server shall not modify any attributes of the batch job.</p>
<h5><a name="tag_03_02_03_08"></a>Queue Batch Job Request</h5>
<p>A batch queue is controlled by one and only one batch server. A batch server is said to own the queues that it controls. Batch
clients make requests of batch servers to have jobs queued. Such a request is called a <i>Queue Batch Job Request</i>.</p>
<p>A batch server requested to queue a batch job for which the queue is not specified shall select an implementation-defined queue
for the batch job. Such a queue is called the ``default queue'' of the batch server. The implementation shall provide the means for
a batch administrator to specify the default queue. The queue, whether specified or defaulted, is called the ``target queue''.</p>
<p>A batch server shall reject a <i>Queue Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The client is not authorized to create a batch job in the target queue.</p>
</li>
<li>
<p>The request specifies a queue that does not exist on the batch server.</p>
</li>
<li>
<p>The target queue is an execution queue and the batch server cannot satisfy a resource requirement of the batch job.</p>
</li>
<li>
<p>The target queue is an execution queue and an unrecognized resource is requested.</p>
</li>
<li>
<p>The target queue is an execution queue, the batch server does not support checkpointing, and the value of the <i>Checkpoint</i>
attribute of the batch job is not NO_CHECKPOINT.</p>
</li>
<li>
<p>The job requires access to a user identifier that the batch client is not authorized to access.</p>
</li>
</ul>
<p>A batch server may reject a <i>Queue Batch Job Request</i> for other implementation-defined reasons.</p>
<p>A batch server that accepts a <i>Queue Batch Job Request</i> for a batch job for which the PBS_O_QUEUE value is missing from the
value of the <i>Variable_List</i> attribute of the batch job shall add that variable to the list and set the value to the name of
the target queue. Once set, no server shall change the value of PBS_O_QUEUE, even if the batch job is moved to another queue.</p>
<p>A batch server that accepts a <i>Queue Batch Job Request</i> for a batch job for which the PBS_JOBID value is missing from the
value of the <i>Variable_List</i> attribute shall add that variable to the list and set the value to the batch job identifier
assigned by the server in the format:</p>
<blockquote>
<pre>
<tt>sequence_number.server
</tt>
</pre>
</blockquote>
<p>A batch server that accepts a <i>Queue Batch Job Request</i> for a batch job for which the PBS_JOBNAME value is missing from the
value of the <i>Variable_List</i> attribute of the batch job shall add that variable to the list and set the value to the
<i>Job_Name</i> attribute of the batch job.</p>
<h5><a name="tag_03_02_03_09"></a>Batch Queue Status Request</h5>
<p>A batch client can request that a batch server respond with the status and attributes of a queue. Such a request is called a
<i>Batch Queue Status Request</i>.</p>
<p>A batch server shall reject a <i>Batch Queue Status Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to query the status of the designated queue.</p>
</li>
<li>
<p>The designated queue does not exist on the batch server.</p>
</li>
</ul>
<p>A batch server may reject a <i>Batch Queue Status Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Batch Queue Status Request</i> shall return a <i>Batch Queue Status Reply</i> to the batch
client.</p>
<h5><a name="tag_03_02_03_10"></a>Release Batch Job Request</h5>
<p>A batch client can request that the server remove one or more holds from a batch job. Such a request is called a <i>Release
Batch Job Request</i>.</p>
<p>A batch server shall reject a <i>Release Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to remove one or more of the requested holds from the batch job.</p>
</li>
<li>
<p>The batch server does not manage the specified job.</p>
</li>
</ul>
<p>A batch server may reject a <i>Release Batch Job Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Release Batch Job Request</i> shall remove each type of hold listed in the <i>Release Batch Job
Request</i>, that is present, from the value of the <i>Hold_Types</i> attribute of the batch job.</p>
<h5><a name="tag_03_02_03_11"></a>Rerun Batch Job Request</h5>
<p>To rerun a batch job is to kill the session leader of the batch job and leave the batch job eligible for re-execution. A batch
client can request that a batch server rerun a batch job. Such a request is called <i>Rerun Batch Job Request</i>.</p>
<p>A batch server shall reject a <i>Rerun Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to rerun the designated job.</p>
</li>
<li>
<p>The <i>Rerunable</i> attribute of the designated job has the value FALSE.</p>
</li>
<li>
<p>The designated job is not in the RUNNING state.</p>
</li>
<li>
<p>The batch server does not manage the designated job.</p>
</li>
</ul>
<p>A batch server may reject a <i>Rerun Batch Job Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that rejects a <i>Rerun Batch Job Request</i> shall in no way modify the execution of the batch job.</p>
<p>A batch server that accepts a request to rerun a batch job shall perform the following services:</p>
<ul>
<li>
<p>Requeue the batch job in the execution queue in which it was executing.</p>
</li>
<li>
<p>Send a SIGKILL signal to the process group of the session leader of the batch job.</p>
</li>
</ul>
<p>An implementation may indicate to the batch job owner that the batch job has been rerun. Whether and how the batch job owner is
notified that a batch job is rerun is implementation-defined.</p>
<p>A batch server that reruns a batch job may send other implementation-defined signals to the session leader of the batch job
prior to sending the SIGKILL signal.</p>
<p>A batch server may preferentially select a rerun job for execution. Whether rerun jobs shall be selected for execution before
other jobs is implementation-defined.</p>
<h5><a name="tag_03_02_03_12"></a>Select Batch Jobs Request</h5>
<p>A batch client can request from a batch server a list of jobs managed by that server that match a list of selection criteria.
Such a request is called a <i>Select Batch Jobs Request</i>. All the batch jobs managed by the batch server that receives the
request are candidates for selection.</p>
<p>A batch server that accepts a <i>Select Batch Jobs Request</i> shall return a list of zero or more job identifiers that
correspond to jobs that meet the selection criteria.</p>
<p>If the batch client is not authorized to query the status of a batch job, the batch server shall not select the batch job.</p>
<h5><a name="tag_03_02_03_13"></a>Server Shutdown Request</h5>
<p>A batch server is defined to have shut down when it does not respond to requests from clients and does not perform deferred
services for jobs. A batch client can request that a batch server shut down. Such a request is called a <i>Server Shutdown
Request</i>.</p>
<p>A batch server shall reject a <i>Server Shutdown Request</i> from a client that is not authorized to shut down the batch server.
The method used to determine whether the user of a client is authorized to perform the requested action is
implementation-defined.</p>
<p>A batch server may reject a <i>Server Shutdown Request</i> for other implementation-defined reasons. The reasons for which a
<i>Server Shutdown Request</i> may be rejected are implementation-defined.</p>
<p>At server shutdown, a batch server shall do, in order of preference, one of the following:</p>
<ul>
<li>
<p>If checkpointing is implemented and the batch job is checkpointable, then checkpoint the batch job and requeue it.</p>
</li>
<li>
<p>If the batch job is rerunnable, then requeue the batch job to be rerun (restarted from the beginning).</p>
</li>
<li>
<p>Abort the batch job.</p>
</li>
</ul>
<h5><a name="tag_03_02_03_14"></a>Server Status Request</h5>
<p>A batch client can request that a batch server respond with the status and attributes of the batch server. Such a request is
called a <i>Server Status Request</i>.</p>
<p>A batch server shall reject a <i>Server Status Request</i> if the following statement is true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to query the status of the designated server.</p>
</li>
</ul>
<p>A batch server may reject a <i>Server Status Request</i> for other implementation-defined reasons. The method used to determine
whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a <i>Server Status Request</i> shall return a <i>Server Status Reply</i> to the batch client.</p>
<h5><a name="tag_03_02_03_15"></a>Signal Batch Job Request</h5>
<p>A batch client can request that a batch server signal the session leader of a batch job. Such a request is called a <i>Signal
Batch Job Request</i>.</p>
<p>A batch server shall reject a <i>Signal Batch Job Request</i> if any of the following statements are true:</p>
<ul>
<li>
<p>The user of the batch client is not authorized to signal the batch job.</p>
</li>
<li>
<p>The job is not in the RUNNING state.</p>
</li>
<li>
<p>The batch server does not manage the designated job.</p>
</li>
<li>
<p>The requested signal is not supported by the implementation.</p>
</li>
</ul>
<p>A batch server may reject a <i>Signal Batch Job Request</i> for other implementation-defined reasons. The method used to
determine whether the user of a client is authorized to perform the requested action is implementation-defined.</p>
<p>A batch server that accepts a request to signal a batch job shall send the signal requested by the batch client to the process
group of the session leader of the batch job.</p>
<h5><a name="tag_03_02_03_16"></a>Track Batch Job Request</h5>
<p><i>Track Batch Job Request</i> is an optional feature of batch servers. If an implementation supports <i>Track Batch Job
Request</i>, the statements in this section apply and the configuration variable POSIX2_PBS_TRACK shall be set to 1.</p>
<p><i>Track Batch Job Request</i> provides a method for tracking the current location of a batch job. Clients may use the tracking
information to determine the batch server that should receive a batch server request.</p>
<p>If <i>Track Batch Job Request</i> is supported by a batch server, then when the batch server queues a batch job as a result of a
<i>Queue Batch Job Request</i>, and the batch server is not the batch server that created the batch job, the batch server shall
send a <i>Track Batch Job Request</i> to the batch server that created the job.</p>
<p>If <i>Track Batch Job Request</i> is supported by a batch server, then the <i>Track Batch Job Request</i> may also be sent to
other servers as a backup to the primary server. The method by which backup servers are specified is implementation-defined.</p>
<p>If <i>Track Batch Job Request</i> is supported by a batch server that receives a <i>Track Batch Job Request</i>, then the batch
server shall record the current location of the batch job as contained in the request.</p>
<h3><a name="tag_03_03"></a>Common Behavior for Batch Environment Utilities</h3>
<h4><a name="tag_03_03_01"></a>Batch Job Identifier</h4>
<p>A utility shall recognize <i>job_identifier</i>s of the format:</p>
<blockquote>
<pre>
<tt>[sequence_number][.server_name][@server]
</tt>
</pre>
</blockquote>
<p>where:</p>
<dl compact>
<dt><i>sequence_number</i></dt>
<dd>An integer that, when combined with <i>server_name</i>, provides a batch job identifier that is unique within the batch
system.</dd>
<dt><i>server_name</i></dt>
<dd>The name of the batch server to which the batch job was originally submitted.</dd>
<dt><i>server</i></dt>
<dd>The name of the batch server that is currently managing the batch job.</dd>
</dl>
<p>If the application omits the batch <i>server_name</i> portion of a batch job identifier, a utility shall use the name of a
default batch server.</p>
<p>If the application omits the batch <i>server</i> portion of a batch job identifier, a utility shall use:</p>
<ul>
<li>
<p>The batch server indicated by <i>server_name</i>, if present</p>
</li>
<li>
<p>The name of the default batch server</p>
</li>
<li>
<p>The name of the batch server that is currently managing the batch job</p>
</li>
</ul>
<p>If only @ <i>server</i> is specified, then the status of all jobs owned by the user on the requested server is listed.</p>
<p>The means by which a utility determines the default batch server is implementation-defined.</p>
<p>If the application presents the batch <i>server</i> portion of a batch job identifier to a utility, the utility shall send the
request to the specified server.</p>
<p>A strictly conforming application shall use the syntax described for the job identifier. Whenever a batch job identifier is
specified whose syntax is not recognized by an implementation, then a message for each error that occurs shall be written to
standard error and the utility shall exit with an exit status greater than zero.</p>
<p>When a batch job identifier is supplied as an argument to a batch utility and the <i>server_name</i> portion of the batch job
identifier is omitted, then the utility shall use the name of the default batch server.</p>
<p>When a batch job identifier is supplied as an argument to a batch utility and the batch <i>server</i> portion of the batch job
identifier is omitted, then the utility shall use either:</p>
<ul>
<li>
<p>The name of the default batch server</p>
<p>or:</p>
</li>
<li>
<p>The name of the batch server that is currently managing the batch job</p>
</li>
</ul>
<p>When a batch job identifier is supplied as an argument to a batch utility and the batch <i>server</i> portion of the batch job
identifier is specified, then the utility shall send the required <i>Batch Server Request</i> to the specified server.</p>
<h4><a name="tag_03_03_02"></a>Destination</h4>
<p>The utility shall recognize a <i>destination</i> of the format:</p>
<blockquote>
<pre>
<tt>[queue][@server]
</tt>
</pre>
</blockquote>
<p>where:</p>
<dl compact>
<dt><i>queue</i></dt>
<dd>The name of a valid execution or routing queue at the batch server denoted by @ <i>server</i>, defined as a string of up to 15
alphanumeric characters in the portable character set (see the Base Definitions volume of IEEE&nbsp;Std&nbsp;1003.1-2001, <a href=
"../basedefs/xbd_chap06.html#tag_06_01">Section 6.1, Portable Character Set</a>) where the first character is alphabetic.</dd>
<dt><i>server</i></dt>
<dd>The name of a batch server, defined as a string of alphanumeric characters in the portable character set.</dd>
</dl>
<p>If the application omits the batch <i>server</i> portion of a destination, then the utility shall use either:</p>
<ul>
<li>
<p>The name of the default batch server</p>
<p>or:</p>
</li>
<li>
<p>The name of the batch server that is currently managing the batch job</p>
</li>
</ul>
<p>The means by which a utility determines the default batch server is implementation-defined.</p>
<p>If the application omits the <i>queue</i> portion of a destination, then the utility shall use the name of the default queue at
the batch server chosen. The means by which a batch server determines its default queue is implementation-defined. If a destination
is specified in the <i>queue</i>@ <i>server</i> form, then the utility shall use the specified queue at the specified server.</p>
<p>A strictly conforming application shall use the syntax described for a destination. Whenever a destination is specified whose
syntax is not recognized by an implementation, then a message shall be written to standard error and the utility shall exit with an
exit status greater than zero.</p>
<h4><a name="tag_03_03_03"></a>Multiple Keyword-Value Pairs</h4>
<p>For each option that can have multiple keyword-value pair arguments, the following rules shall apply. Examples of options that
can have list-oriented option-arguments are <b>-u</b> <i>value</i>@ <i>keyword</i> and <b>-l</b> <i>keyword</i>= <i>value</i>.</p>
<ol>
<li>
<p>If a batch utility is presented with a list-oriented option-argument for which a keyword has a corresponding value that begins
with a single or double quote, then the utility shall stop interpreting the input stream for delimiters until a second single or
double quote, respectively, is encountered. This feature allows some flexibility for a comma ( <tt>','</tt> ) or equals sign (
<tt>'='</tt> ) to be part of the value string for a particular keyword; for example:</p>
<blockquote>
<pre>
<tt>keywd1='val1,val2',keywd2="val3,val4"
</tt>
</pre>
</blockquote>
<basefont size="2">
<dl>
<dt><b>Note:</b></dt>
<dd>This may require the user to escape the quotes as in the following command:
<pre>
<tt>foo -xkeywd1=\'val1,val2\',keywd2=\"val3,val4\"
</tt>
</pre>
</dd>
</dl>
<basefont size="3"></li>
<li>
<p>If a batch server is presented with a list-oriented attribute that has a keyword that was encountered earlier in the list, then
the later entry for that keyword shall replace the earlier entry.</p>
</li>
<li>
<p>If a batch server is presented with a list-oriented attribute that has a keyword without any corresponding value of the form
<i>keyword</i>= or @ <i>keyword</i> and the same keyword was encountered earlier in the list, then the prior entry for that keyword
shall be ignored by the batch server.</p>
</li>
<li>
<p>If a batch utility is expecting a list-oriented option-argument entry of the form <i>keyword</i>= <i>value</i>, but is presented
with an entry of the form <i>keyword</i> without any corresponding <i>value</i>, then the entry shall be treated as though a
default value of NULL was assigned (that is, <i>keyword</i>=NULL) for entry parsing purposes. The utility shall include only the
keyword, not the NULL value, in the associated job attribute.</p>
</li>
<li>
<p>If a batch utility is expecting a list-oriented option-argument entry of the form <i>value</i>@ <i>keyword</i>, but is presented
with an entry of the form <i>value</i> without any corresponding <i>keyword</i>, then the entry shall be treated as though a
keyword of NULL was assigned (that is, <i>value</i>@NULL) for entry parsing purposes. The utility shall include only the value, not
the NULL keyword, in the associated job attribute.</p>
</li>
<li>
<p>A batch server shall accept a list-oriented attribute that has multiple occurrences of the same keyword, interpreting the
keywords, in order, with the last value encountered taking precedence over prior instances of the same keyword. This rule allows,
but does not require, a batch utility to preprocess the attribute to remove duplicate keywords.</p>
</li>
<li>
<p>If a batch utility is presented with multiple list-oriented option-arguments on the command line or in script directives, or
both, for a single option, then the utility shall concatenate, in order, any command line keyword and value pairs to the end of any
directive keyword and value pairs separated by a single comma to produce a single string that is an equivalent, valid
option-argument. The resulting string shall be assigned to the associated attribute of the batch job (after optionally removing
duplicate entries as described in item 6).</p>
</li>
</ol>
<hr size="2" noshade>
<center><font size="2"><!--footer start-->
UNIX &reg; is a registered Trademark of The Open Group.<br>
POSIX &reg; is a registered Trademark of The IEEE.<br>
[ <a href="../mindex.html">Main Index</a> | <a href="../basedefs/contents.html">XBD</a> | <a href=
"../utilities/contents.html">XCU</a> | <a href="../functions/contents.html">XSH</a> | <a href="../xrat/contents.html">XRAT</a>
]</font></center>
<!--footer end-->
<hr size="2" noshade>
</body>
</html>