rAD8ec1PsRtwE$:I>a1ePE$:e[Z=*SRcpI&[ >s *ApcpS:5pc |osPS:5pEF0 dyܓBhS:5pJm 9dyؑsPS:5p% o#3(hS:5p/ Mdx9f S:5p!JmVd#(0S:5pIe |qsPS:5pQtp`s[9 8S:5pS;]{|rfS:5pU`UdycpS:5po= x7f S:5p]&=sPkePS:5p_W&:{C0S:5p:%BsRsZf S:5peH9s[psPS:5p e |tCsPS:5p Ӝ%0sQ4f S:5psl^sRttsP] HtI0eZ!d]?$\`"jq5ePcV.Y Q36arcp={ BATCH.DOC;4 @ PARC-MAXC } BATCH is a program designed to facilitate running lengthy, compute-bound jobs with a minimum of interference with interactive computation. Briefly, it allows a user to start up a job and then, at fixed intervals, it reads the load average to determine whether the program should be frozen or allowed to continue. The maximum load at which the program is allowed to run and the length of the interval at which the load average is polled may be set by the user. A more detailed description follows. BATCH responds to 12 commands, each triggered by the first character in its name. Program, Initial quantum, Quantum, Maximum Load, Terminal code for interrupt character, Start, Continue, Detach and start (continue), Reset primary I/O and start (continue), Exit BATCH, List type-ahead, Help BATCH's herald is "<>". BATCH enables an interrupt character (see "Terminal code for interrupt character" below). Typing this character at any point returns control to BATCH command level. If the user has typed ahead, he is given the option of saving that type-ahead for later use when he subsequently executes a Continue, Detach and continue, or Reset primary I/O and continue command. Program: User may input any program (file) name. The extension is defaulted to .SAV. If a directory is not specified, BATCH searches (1) the connected directory, (2) , and (3) the user's login directory. This command does a GET jsys on the program into an inferior fork where the program will run. Start This command starts the user program leaving the TTY as the primary input/output device. When the user program terminates, control returns to BATCH command level. If the user has not specified a program, BATCH automatically initiates an inferior EXEC. Continue This command allows an interrupted(by typing the BATCH interrupt character) program to be continued from the point of interruption. Useful for changing Quantum, Maxload, and Terminal code parameters. If there is saved type-ahead, this command gives you the option of restoring that type-ahead as terminal input. Detach and start (continue) Before actually detaching, the command asks: Reset primary input? You respond with Y or N. If you answer yes, BATCH asks for a "File:" which then becomes the primary input source. BATCH then asks the corresponding question for primary output. It then detaches the job. When the user program terminates, BATCH logs the job (itself) out. If there is saved type-ahead, this command first gives you the option of using that type-ahaed as the primary input stream. Reset primary I/O and start (continue) This command is identical to the Detach and start (continue) command except that the user job remains attached to the controlling TTY and does not log the user job out upon completion but returns to BATCH command level. Initial quantum = This command sets the amount of real time between the time the user program actually is started (by the Start command) and the time BATCH begins monitoring. This ensures a period during which the user can specify commands to the user program. It is initially set to 10 minutes. A maximum value of 30 minutes is allowed. The time (minutes) is specified as a floating point number (i.e. 2.1 = 2 min., 6 sec.). Quantum = This command sets the real time interval between successive readings of the Load Average (more precisely, the 5-minute-load-av.). It is initially set to 2 minutes and a maximum value of 5 minutes is allowed. As above, the time is specified in floating point(minutes). Maximum load = This command sets the maximum load under which the program will run after the Initial Quantum period. The Load Average is checked every "quantum" minutes. It is initially set to 2 and a maximum value of 4 is allowed. Maximum load is input as a floating point number. Terminal code for interrupt character = In addition to winning the prize for the longest command string in the Tenex world, this command allows the user to specify the decimal terminal code for a character which when typed on the controlling TTY for BATCH will send control back to BATCH command level (freezing the user program fork, if it is running). Initially this code is set to 25 (decimal) which enables control-Y as an interrupt character. See the Tenex Jsys Manual (section 5, page 8) for codes for other characters. The code is input as a decimal number in the range [0,29]. List type-ahead If type-ahead has been saved for the user, this command types it on the controlling TTY. Exit BATCH This command (confirmed with a carriage return) executes a RESET jsys and then returns to the EXEC. Help Types a list of the commands. WARNING -- CAVEAT -- BEWARE -- NOTE WELL !!!!!!!!!!! Running Runfil under batch and reseting the primary I/O will have disasterous results since Runfil uses the STI Jsys to simulate input to an inferior exec. You can get the same effect by using BATCH and resetting the primary input file to be the one you would have used for Runfil. Be careful, of course, to remove Runfil-dependent characters from the command file. Problems and suggestions relating to BATCH should be directed to its author, Chuck Geschke. jNew features (SWG 9/21/76): 1. "EXISTING" removed from command names. 2. CREATE.TASK asks for all "important" fields. 3. User must confirm questionable file names. 4. Help messages more informative and disk-resident. New features (SWG 8/23/76): 1. System programs in SYS2 directory do not trigger a warning. 2. Bug fixed regarding bad atom trailers in SPECS/MODS files. New features (SWG 2/23/76): 1. A warning is printed if WORKING-DIRECTORY or OUTPUT-FILE is unreasonable. 2. Less garbage, more purity. New features (SWG 2/9/76): 1. Atoms_____ can be used to set a task to-run-at NOW or TONIGHT. 2. INPUT-STREAM asks you first and then uses TEXT or FILE mode input. 3. A warning is printed if FILE-TO-RUN or INPUT-STREAM file does not exist. JHM 06/26/75 06:59:54 Control R's now work in the user interface (except a couple starting prompts to create.task). Also, it tries to be very clever now about bringing up the daemon no earlier than necessary; so if you modify some field like the input-stream of a task, the daemon will not come up; but if you set a new time-of-next-run, it will be made to come up by that new time. The 'uncompensated overhead' currently being printed by the daemon is computed as B/(B+T) , where: B is the cpu time used by the Batch daemon between starting to handle your task (i.e., loading it, evaling any run-test, finding the output-file and input-stream, etc.) and printing that message; T is the final run time for your Task. (Uncompensated because the daemon might be running other jobs simultaneously.) The % time and real time are likewise clocked starting when the daemon first considered running the task. Therefore, quickie jobs that take very little cpu time will show quite small percentage, and overhead like 99%. Best overhead I've seen was about 14% or so; let me know if you get under 10%! (Also, no attempt is made to discount whatever time the daemon may hold the task suspended, in the interests of on-line users.) JHM 06/16/75 06:59:31 Current user interface (TS BATCH) now knows about all the implemented features in BATCH (that is, everything except acknowledgements). Some bugs fixed also; e.g.: you can now modify a field to FALSE, and tasks that are not for night-run only will not print out as such.  "EVALUATE  " This is an associative Vector containing Atoms and Vectors indicating what to do on various conditions (happening to this task). For each condition (named by an Atom), the contents of the next Vector determines the action as follows: for each String, send a message to that user; for each positive Fix, make that task runnable; and for each negative Fix, make that task unrunnable. (Acknowledgements are done for one level only, that is, if one task's acknowledgement makes another task runnable, the latter task's acknowledgements will not be triggered.) A task can make itself unrunnable. The following conditions are recognized: ON-COMPLETION ON-COMPLETION:NORMAL ON-COMPLETION:OUT-OF-INPUT ON-COMPLETION:NOT-CONTINUABLE ON-COMPLETION:CONTINUABLE-INTERRUPT ON-COMPLETION:TIME-LIMIT-EXPIRED ON-COMPLETION:JOB-HUNG ON-COMPLETION:RUN-TEST-FALSE ON-COMPLETION:SYSTEM-CRASH ON-COMPLETION:ERROR-IN-STARTING ON-DELAY ON-VALRET IF-MODIFIED IF-MADE-RUNNABLE IF-MADE-UNRUNNABLE IF-ABORTED IF-REMOVED-FROM-QUEUE ON-ANY-OTHER If nothing is supplied for this field (or if an empty Vector is supplied), then no acknowledgements will take place. The condition ON-ANY-OTHER is satisfied by any of the other conditions, ______unless that condition is otherwise mentioned. Likewise, ON-COMPLETION is satisfied by any of the completion conditions, unless that condition is specifically mentioned, and IF-MODIFIED is satisfied by any modification to the task, which includes all of the IF-... conditions, unless that condition is specifically mentioned. Note that ON-COMPLETION:SYSTEM-CRASH is acknowledged when the daemon does come up after an ITS/Batch crash. ON-DELAY is triggered when the task cannot run because the daemon cannot open either a job or a pseudo-console. ON-VALRET may someday allow a string argument, meaning "on valretting this string". These examples show a two-task interdependency chain: ACKNOWLEDGEMENT-INFO field for task # 20: [ON-COMPLETION:SYSTEM-CRASH ["JHM" -21] ON-COMPLETION:NORMAL ON-COMPLETION:OUT-OF-INPUT [-20 21] IF-ABORTED IF-MADE-UNRUNNABLE ["JHM" -21]] ACKNOWLEDGEMENT-INFO field for task # 21: [ON-COMPLETION:NORMAL ON-COMPLETION:OUT-OF-INPUT [20 -21] IF-ABORTED IF-MADE-UNRUNNABLE [-20 "JHM"]] -Answering True will cause the daemon to check the task queue (on disk) for updates (i.e., new specification and modification files) after completing the task. This feature allows a task to create new tasks and update old ones simply by writing out the appropriate file ( DSK:.BATCH;SPECS > or DSK:.BATCH;MODS > ), in associative vector format (being careful to use correct ATOM names, including implicit or explicit trailers).6maximum number of minutes of CPU time that the task will be allowed to accumulate on a given run (Notes: There is about five percent leeway, and tests are made once per minute. Time limit over 5.0 minutes will force the task into the \"long\" tasks' queue. Time limit of 2 seconds or less (type %) will allow the task to run regardless of system load. Time limit of less than 5.0 minutes will allow the task to run at a higher system load than normal: the shorter the limit, the higher the allowed load.)oPlease type either a task-description field that you want to specify (change from the default) or a command to Print the current specifications or to Quit/End or ABort the specification procedure. Default values for fields left unspecified are explained if you type '?' before field-value input; for most fields, the default can be retained by typing just carriage return. There is no need to use the 'go-back-to-previous-input' signal: if you select a field more than once, you can give a new value or return to the default. _Please type either a task-description field that you want to respecify (change from the existing) or a command to Print the current specifications or to Quit/End or ABort the specification procedure. Default values for fields left unspecified are explained if you type '?' before field-value input. There is no need to use the 'go-back-to-previous-input' signal: if you select a field more than once, you can give a new value or return to the default. ADate/times and time intervals are expressed in the standard format: ((yr mo day) (hr min sec) zone) where all fields are Fixes, except the zone, which is a String like "EDT". The year is relative to 1900. Hours on 24-hour clock (no AM or PM). Therefore, 10:12 on November 28 1971 is represented as: ((71 11 28) (10 12 0) "EST") (More help is available.) Omitted fields default to the current year, month, day; zero second, minute, hour; and local zone. Thus ((17) (13 30)) is equivalent to '1:30 pm, on the 17th of this month'; and (() (25)) is equivalent to '1:00 am tomorrow'. [end of info] I Simulated console input will pause immediately after any of these characters. It is especially important to do this whenever the program .RESETs its console input buffer, for example, after a RESTORE in MDL or ___ESC ___ESC in TECO. It is also important for a delimiter character to appear at least as often as every fifty characters in the input stream, due to difficulties with pseudo-console buffering. The default delimiter characters (on creation of a task) are ___ESC and __CR, except for TECO, which uses ___ESC only. If you want a different set of characters (or none at all), type them in a string, but quote difficult characters with ^Q, and don't forget the delimiting \"s.This is the maximum number of minutes this task will be allowed to sit using no cpu time. It exists mainly for network applications. The highest allowed is 25 minutes, and anything over 5 minutes will force this task into the \"long\" tasks' queue._Simulated console input can come either (1) from (possibly empty) TEXT in the task description itself or (2) from a file that is input completely whenever the task starts running. Do you want to use a separate file, which is much easier to edit? Console I/O should be minimized (it will be slow and error-prone): use, for example, FLOAD in MDL. A delimiter (for example ___ESC) should appear at least as often as every 50 characters in the input.%If you wish, type a line to be passed to the task as an argument. In MONIT or DDT, this line follows the name of the system program, for example the 'J' in ':PEEK J'.MPlease type either a task-description field that you want to modify (change from the current value) or a command to Print the current modifications or to Quit/End or ABort the modification procedure. There is no need to use the 'go-back-to-previous-input' signal: if you select a field more than once, you can give a new value or return it to unmodified status. )Answering True will cause the task to be started only at night. This tries to avoid bothering prime-time users, should ITS or the Batch daemon be down at night when the task is scheduled to run -- the daemon will wait for another night to run the task. (Night is currently defined as 1 a.m. to 8 a.m., plus all day Sundays and holidays, plus Mondays and days after holidays before 1 a.m.)kA transcript of simulated console output is appended to this file, which need not exist beforehand. The output is accompanied by useful information supplied by the daemon and followed by a page boundary (^L). If you want a new file for each run, include '>' or 'RUN_#' in the file name; the latter is changed to the five-digit run number each time. If you don't want to see the output, type 'NUL:'. If you want the output sent as a message instead of put in a file, type 'MSG:to', where 'to' is the recipient.G(1) If the SCHEDULER field is defaulted on creation of the task (or False), a date/time LIST here implies a periodic rescheduling interval, while a VECTOR here should contain one or more date/time LISTs at which the task should be run. Usually you want to put a LIST in this field and not default it. If the task is to run once, the LIST prevents the task description from being deleted after the first run, so that an unexpected failure can be explained and corrected for another try. If the task is to run occasionally, the LIST similarly preserves the description on disk, and the task can easily be made to run when desired. Example: ((1 0 0) ()) => run every 1 year. If the task is to run periodically, the LIST specifies the period. Example: ((0 0 7) ()) => run every 7 days. (2) Otherwise, the SCHEDULER function will be applied to this field, which the daemon will not examine; the 'OBJECT' you type will be immediately EVALed. (More help is available.) Date/times and time intervals are expressed in the standard format: ((yr mo day) (hr min sec) zone) where all fields are Fixes, except the zone, which is a String like "EDT". The year is relative to 1900. Hours on 24-hour clock (no AM or PM). Therefore, 10:12 on November 28 1971 is represented as: ((71 11 28) (10 12 0) "EST") (More help is available.) Omitted fields default to the current year, month, day; zero second, minute, hour; and local zone. Thus ((17) (13 30)) is equivalent to '1:30 pm, on the 17th of this month'; and (() (25)) is equivalent to '1:00 am tomorrow'. [end of info]  Answering True allows the daemon to restart the task from the beginning if the system (or daemon) crashes whilst running this task. Otherwise, the daemon will treat the task as if it had completed, but will hold it in the 'unrunnable' state until modified. Default (on creation of a task) is False.UThe task name is an arbitrary, not necessarily unique, way to refer to the task. One of its uses is that the FILE-TO-RUN defaults (on creation of a task) to SYS:TS - . The task id number (assigned by the BATCH system) is the unique identification used to locate a task for modification, etc. The concatenation of originator, task-name, and id number gives a symbolic handle on a task..There are currently two BATCH queues: one for 'short' tasks and one for 'long' tasks. The short tasks' queue has an enforced CPU time limit of five minutes but allows tasks to be run (approximately) on time, without interference from long tasks, which may take hours of real time. Current policy allows one task from each queue to be running concurrently, with tasks picked from the 'short' queue to fill the 'long' slot when possible.= The RUN-TEST and SCHEDULER fields allow the user to specify arbitrary functions for deciding whether to run a task and for rescheduling a task to run again. The RUN-TEST (if specified), is Evaluated before creating a job to run the task. The result of the evaluation will be included in the task's transcript file. If this test returns a non-False (and does not cause an error), the task's FILE-TO-RUN will be loaded and run. If this test returns a False, the task will be treated as if it had run to completion without using any time. (More help is available.) In any case, the daemon will ignore the contents of the RUN-TEST-INFO field (except to lose the contents if it is a False). During the evaluation of the RUN-TEST, the Atom MY-TASK will be bound to the task descriptor, so that the RUN-TEST can reference other fields. The Atom INFO-FIELD will be bound to the RUN-TEST-INFO field. Both Atoms are in the same Oblist with all of the task-descriptor field-name Atoms; thus they need have no trailers in SPECS and MODS files. If the Atom INFO-FIELD is SET (or PUT into) during the evaluation of the RUN-TEST, then the RUN-TEST-INFO field of the task descriptor will be changed and included when updating the disk queue. Various fields of the task descriptor can be read with Forms like or just , and written with . (More help is available.) After a task is run, it will be rescheduled if: (1) there exists a SCHEDULER, or (2) the RESCHEDULE-INFO field is a List or a Vector. If there is a SCHEDULER, it will be Evaluated while INFO-FIELD is bound to the RESCHEDULE-INFO field. Otherwise, the RESCHEDULE-INFO field will be interpreted in the "standard" way. (More help is available.) If a user's SCHEDULER is Evaluated, and if the result of the Evaluation is a List, it will be interpreted as a standard absolute date/time, and the task will be rescheduled to then. The List must be a legal argument to DTNORM!-TIMFCN!-PACKAGE. If the result is a Fix or a Float, then the task will be rescheduled to the "current" TIME-OF-NEXT- RUN plus that many minutes. Otherwise, the task will be removed from the queue. (More help is available.) If there is no SCHEDULER, then the daemon will reschedule the task according to the RESCHEDULE-INFO field. If this field is a List, it will be interpreted as a standard time interval (see far below), and the task will be rescheduled to that time. If this field is a Vector, it will be assumed to contain standard absolute date/time Lists; the task will be rescheduled to the first element, and the vector will be RESTed. (More help is available.) While the daemon is parsing a task's specification file, the Oblist path contains the Root Oblist and an Oblist for the names of descriptor fields and of built-in functions. There are other Oblists existing in the daemon, but access to them requires Atom trailers. The availability of other Oblists is subject to change, but without fail the "TIMFCN" Package will be there. As an example, here is a RUN-TEST that succeeds only on working days: > <==? 6 > >> There is currently a built-in function that checks to see if a file or set of files exists: - ...> returns true only if all the files named by its String arguments exist. Similarly, > returns true only if the specified ARPANET host (Fix or String) was accepting logins at the last survey or other more recent use. Any generally-useful tests will eventually be built in: speak up, world. (More help is available.) Although the daemon tries, there is little it can do to protect itself against intentional maliciousness in RUN-TESTs and SCHEDULERs, since it is written to provide maximum flexibility and power. Non-intentional errors will be hardship enough. Examples of uncouth things: deliberately causing an ERROR doing a RESTORE playing with LVALs (besides MY-TASK and INFO-FIELD) that you don't bind playing with GVALs having more than two Channels open concurrently leaving Channels open FLOADing random garbage doing I/O to the console (The daemon has none.) running your program inside the daemon anything to do with Processes or Interrupts It is hoped that programs in fields will be fairly short and simple. Please contact the authors if you have the slightest question. Ideas for generally-useful functions to build into the daemon are welcome. (More help is available.) Date/times and time intervals are expressed in the standard format: ((yr mo day) (hr min sec) zone) where all fields are Fixes, except the zone, which is a String like "EDT". The year is relative to 1900. Hours on 24-hour clock (no AM or PM). Therefore, 10:12 on November 28 1971 is represented as: ((71 11 28) (10 12 0) "EST") (More help is available.) Omitted fields default to the current year, month, day; zero second, minute, hour; and local zone. Thus ((17) (13 30)) is equivalent to '1:30 pm, on the 17th of this month'; and (() (25)) is equivalent to '1:00 am tomorrow'. [end of info]  QOwgA4AveAu the BATCH-command descriptions for the MUDCAL DESCRIBE command. See MSB for further details." "> > ) (T )> 4 From: JHM at MIT-AI Message id: <[MIT-DMS].50010> Originated: 16 APR 77 at 0327 EST Received: 16 APR 77 at 0327 EST JHM@MIT-AI 04/16/77 03:25:08 some stuff from my OMAIL archive that you might be interested in: JHM@DM 08/10/75 09:56:17 IOC HANDLER FOR BATCH: MAKE SURE IT IS NOT SCRIPTING TO BATCH LOG BEFORE SCRIPTING ERROR MSG. (SHIT, GOING TO HAVE TO BE AT INT LEVEL GREATER THAN SCRIPTING...). ALSO ALLOW FOR RECURSED LOSAGE HANDLING THERE. { SYS:QUEUE.HLP @ CMU-10A } Note: This is *NOT* the DEC QUEUE command! QUEUE is the program used to interface to the CMU mini-batch system. It is invoked by the QUEUE command or the SUBMIT command. The QUEUE command without arguments is the same as "R QUEUE". The SUBMIT command without arguments is the same as "QUEUE SUBMIT". The available queue-commands are HELP, SUBMIT, CANCEL, REMIND, INSPECT, and PRESENT. If no parameters are given to SUBMIT, REMIND or CANCEL then you will be prompted for them. It is possible to avoid the prompting and specify all parameters on a single command line. Follow the monitor command QUEUE by a queue-command and its parameters, or the monitor command SUBMIT by the parameters for the queue-command SUBMIT. The monitor will accept some queue-commands from terminals that are not logged in. Queue-commands have the format: where is SUBMIT, REMIND, INSPECT, CANCEL, or PRESENT. SUBMIT and CANCEL require a file name which is the name of the control file. REMIND requires a target for the message. INSPECT and PRESENT do not take any arguments. The are specified as where the s are At time (hh:mm) when to start execution @ time (same as AT) On date the day to start execution (no internal blanks) To logfile Defaults to .LOG Running time (h:mm:ss) maximum execution time PERmitting n Allows n errors For ppn Defaults to user's ppn Mayrestart BATCH will restart job if it fails to complete due to a system crash. ERrors This word is ignored (see example below) PAssword If not supplied will be asked for EVery (hh:mm:ss or DAYS or WEEKS or MONTH) how often to repeat a job or a remind UNtil day to stop repeats of reminds UPto time to stop repeats of reminds Unique abbreviations are accepted. Examples: SUBMIT BATCHJ Submits file BATCHJ.CTL. Other parameters will be requested. SUBMIT BATCHJ RUNNING 10:00 Sets run time to be 10 minutes. All other parameters are defaulted. Q SUBMIT BATCHJ AT 23:00 FOR C410PK01 PERMIT 5 ERRORS (ERRORS is a null word and is ignored.) Submits a job to run under another userid. SUBM BATCHJ A 17:21 P 0 RU 1:30:0 O F-13 M Submits file BATCHJ.CTL to run on February 13, 1975 running for an hour and a half starting at 5:21 p.m. and aborting the job after the first error. Job will be restarted if it fails to complete due to crash. Q IN Reports status of batch monitor Q P Reports status of just the BATCH job running. Q CAN BATCHJ Cancels a job These are the prompts given, and the defaults assumed: PPN: give the PPN (without brackets) under which you want the batched job to run. (The default--indicated by a bare --means present PPN.) The PPN cannot be defaulted if you are not logged in when the request is submitted. Password: give the password that will be required to LOGIN the job with the specified PPN. The password will not echo. Input File: give the name of a file with the TTY commands that you want to have executed. (The default extension is CTL; the default name is BATCH.) Do not include either the LOGIN or KJOB commands in the file since they are supplied by BATCH. If the file is "TTY:" then the commands may be typed directly into the QUEUE program. Control characters can be entered in "TTY:" files by typing ?. ?? produces a single ?. The commands are copied into a DSK file on the BATCH area; the file is deleted after the job is run. The created filename will be typed out (this file name must be used to cancel the request). Batch jobs created by this TTY: mechanism may not use the automatic requeue feature. Log File: give the name of the file to receive the dialogue between BATCH and your job. (The default extension is LOG; the default name is the name part of the Input file.) If you have a file of this name it will immediately be destroyed since the file is created by QUEUE; the file is empty and BATCH will later write the dialogue into the file. For input files entered from "TTY:" and for jobs SUBMITted without being logged in, the default log file is "LPT:". Runtime (ss or mm:ss or hh:mm:ss): give the maximum expected runtime of the BATCH job. 100 means 100 seconds. 2:15 means 135 seconds. 2:0:0 means 2 hours which is the maximum that BATCH will allow. (The default is 2 minutes.) When (hh:mm): give the 24 hour time before which you do not want the batch job to start. (The default is now.) Date: give the date on which you wish the batch job to start. (The default is today unless the answer to When is less than now in which case the default is tomorrow.) Almost any reasonable input will be accepted. Disambiguation of truly ambiguous entries is done by assuming the day comes before the month unless there is a "," in the input stream. No errors will be given if the parse fails; some random date will be chosen. Maximum Job Errors: give the maximum number of errors that BATCH should allow before aborting the batched job. (The default is 99,999.) An error is defined to be a ? following a line-feed in the output stream. May restart on system crash: type Y or N. (The default is No.) Some jobs cannot be restarted if they fail to finish because the state (of the user's files for instance) may have changed. An answer of "Yes" to this question will cause the BATCH job request to be deleted only after it has been completed. To CANCEL a request the user must give the PPN, the Password and the Input File name. For a description of the mini-batch system, type HELP BATCH.