home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume25 / QBATCH / patch01a < prev    next >
Text File  |  1991-11-12  |  14KB  |  385 lines

  1. Newsgroups: comp.sources.misc
  2. From: alan@tharr.uucp (Alan Saunders)
  3. Subject:  v25i058:  QBATCH - a queued batch processing system for UNIX, Patch01a/2
  4. Message-ID: <csm-v25i058=QBATCH.220540@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: d71c384fc88825c176f6e680b02bea48
  6. Date: Wed, 13 Nov 1991 04:06:55 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: alan@tharr.uucp (Alan Saunders)
  10. Posting-number: Volume 25, Issue 58
  11. Archive-name: QBATCH/patch01a
  12. Environment: UNIX
  13. Patch-To: QBATCH: Volume 25, Issue 20-25
  14.  
  15. This patch fixes several typos an bugs in ifdef'd code not defined on my
  16. system:
  17.  
  18.         : missing semicolons in config.h and config.c
  19.  
  20.         : setuser() should be qb_setuser() in config.c
  21.  
  22.         : toggle_halt_status() now ifdef'd on signal definitions
  23.           for those systems which don't define SIGHALT and SIGCONT
  24.  
  25.         : added install target for qt
  26.  
  27.         : Monitor files now created with correct ownership and access rights.
  28.  
  29.         : removed hardwired path for jobdone script in qp.c
  30.  
  31. ADDITIONS:
  32.  
  33.         : added quickstart document at the request of Ian Lea (Siemens) who
  34.           also pointed out most of the above.
  35.  
  36.  ***
  37.  ************************************************************************
  38.  *** Personal note to Ian Lea ... The email address you gave me bounced!!!
  39.  ************************************************************************
  40.  ***
  41.  
  42.         : Added the ability to mail monitors to the submitting user at
  43.           the request of Peter Da Silva. (peter@ficc.ferranti.com)
  44.  
  45.         : Added ability to log profile timings in a queue logfile as well
  46.           as in the monitors to allow monitoring/ accounting of queue
  47.           throughput when monitors are dispersed (mailed and personal monitors)
  48.  
  49. This patch consists of a patch file (patches.qbatch.p1) and two new files
  50. (doc/quickstart, and src/logging.c)
  51.  
  52. Additional details may be found in the modified NEWS file, and documentation
  53. updates.
  54.  
  55. Change directory to the QBATCH root directory (where you originally unpacked
  56. the QBATCH shar files) and similarly unpack all files in this shar archive.
  57.  
  58. When you have unpacked the archives run patch as follows:
  59.  
  60. patch -p0 <patches/qbatch.p1
  61.  
  62. which will bring all files in the qbatch tree up to date.
  63.  
  64. Change any configration requirements, and make as before.
  65.  
  66. I must apologise for the bugs which crept in, and thank all those providing
  67. feedback, keep it coming.
  68.  
  69. I would like to know the following if you got QBATCH working or intend to do
  70. so:
  71. The system (machine and os) to which you have ported it.
  72. Any problems, you encountered.
  73. Any changes you made to get it to work.
  74. Any comments (preferrably constructive) about QBATCH.
  75. Anything I've left out which you'd like to see implemented.
  76.  
  77. If you get QBATCH working with changes only to config.h, i'd like you to send
  78. a config.<arch> file containing the definitions used on your architecture,
  79. which can be included with future releases to ease the way for new users.
  80.  
  81. Regards .. and thanks .. Alan
  82. -----------------------------
  83. #! /bin/sh
  84. # This is a shell archive.  Remove anything before this line, then feed it
  85. # into a shell via "sh file" or similar.  To overwrite existing files,
  86. # type "sh file -c".
  87. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  88. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  89. # Contents:  . ./doc ./doc/quickstart ./patches ./src ./src/logging.c
  90. # Wrapped by kent@sparky on Tue Nov 12 21:47:45 1991
  91. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  92. echo If this archive is complete, you will see the following message:
  93. echo '          "shar: End of archive 1 (of 2)."'
  94. if test ! -d './doc' ; then
  95.     echo shar: Creating directory \"'./doc'\"
  96.     mkdir './doc'
  97. fi
  98. if test -f './doc/quickstart' -a "${1}" != "-c" ; then 
  99.   echo shar: Will not clobber existing file \"'./doc/quickstart'\"
  100. else
  101.   echo shar: Extracting \"'./doc/quickstart'\" \(5767 characters\)
  102.   sed "s/^X//" >'./doc/quickstart' <<'END_OF_FILE'
  103. X
  104. X
  105. X             QBATCH  a queued batch processing system for UNIX
  106. X
  107. X
  108. X         The QBATCH system and its related programs were
  109. X         written by Alan D. Saunders and are
  110. X         Copyright (c) Vita Services Ltd. 1990 and
  111. X         Copyright (c) Vita Fibres Ltd. 1991
  112. X
  113. XFor those who don't want to read all the documentation before trying out QBATCH,
  114. Xhere is a no frills introduction.
  115. X
  116. XFirst, the admin work.
  117. X    As sysadmin (root) (if you're not, get your sysadmin to do this)
  118. X
  119. X    1. Ensure that the QBATCH programs are correctly compiled and installed.
  120. X
  121. X    2. Ensure that QUEUEPATH, and SPOOLPATH as defined in the makefile
  122. X    exist and are accessible.
  123. X
  124. X    1. Create some queues, a good start is fast, slow, norm.
  125. X    qc -n -10 fast
  126. X    qc -n 10 slow
  127. X    qc norm
  128. X
  129. X    3. Start a process engine for each queue.
  130. X    qp fast
  131. X    qp slow
  132. X    qp norm
  133. X
  134. X    The super user can kill a process engine when it is idle with:
  135. X    qs fast 
  136. X    (or slow, or norm)
  137. X
  138. X    If a job is actually processing when the qs program is run, then qp
  139. X    will wait until the job has finished or is killed before terminating.
  140. X
  141. XNow you can play!  Log in as an ordinary user and start by creating a test
  142. X    script (one that doesn't really do anything) such as
  143. X        id
  144. X        sleep 10
  145. X        env
  146. X        find / -name xyzzy -print
  147. X
  148. X    It should take some time to process, but won't do any damage!
  149. X
  150. X    and try:
  151. X    js -n test fast <name of test script>
  152. X
  153. X    This submits a job to the fast queue which will run your script.
  154. X
  155. X    Check the queue contents with:
  156. X    ql fast
  157. X
  158. X    If you try:
  159. X    ql norm
  160. X    or
  161. X    ql slow
  162. X    You will see empty queues.
  163. X
  164. X    Wait until the job has finished and try:
  165. X    more `qf -m fast`
  166. X
  167. X    To examine the monitor (output) of the job.
  168. X
  169. X    Try submitting the job to the queue several times in succession, perhaps
  170. X    using the -r option to tell you when it has finished:
  171. X    js -n test -r1 fast <testfile>
  172. X    js -n test -r2 fast <testfile>
  173. X    js -n test -r1 fast <testfile>
  174. X    js -n test -r2 fast <testfile>
  175. X    js -n test -r1 fast <testfile>
  176. X    js -n test -r2 fast <testfile>
  177. X    js -n test -r1 fast <testfile>
  178. X    js -n test -r2 fast <testfile>
  179. X
  180. X    Then list the queue again with:
  181. X    ql fast
  182. X    
  183. X    Notice each entry has an entry number in the first column.
  184. X    This can be used to remove jobs from the queue:
  185. X    jk -e<number> fast
  186. X
  187. X    Try it out, try it also on the running job (the one with the number in the
  188. X    second column). ... Didn't work did it?
  189. X    To remove the running job, the kill option must be specified to jk:
  190. X    jk -k -e<number> fast
  191. X
  192. X    Neither of these options will work if you did not submit the job you are
  193. X    trying to remove, and you're not logged in as superuser.
  194. X
  195. X    You will notice that the reply option will only work if the job has
  196. X    actually been processed in some way. A job that is removed from the queue
  197. X    before reaching the top will not give a reply.
  198. X
  199. X    If you need to get rid of all (your) jobs in the queue, try:
  200. X    jk -k -a fast
  201. X
  202. X    The -a is the ALL option.
  203. X
  204. X    Submit another group of jobs to the queue, and get another user, logged in
  205. X    under a different id to submit a group, then submit a few more yourself.
  206. X    Try changing the order of jobs in the queue with:
  207. X    jj -e<entry number> fast
  208. X
  209. X    You can change the order of a consecutive group of your own jobs, by moving
  210. X    selected entries to the top of the group, but you can't (unless you are
  211. X    logged in as super user) move a job above someone else's.
  212. X
  213. X    You can direct the monitor (output) of a job to a place of your own
  214. X    choosing either:
  215. X    js -n test -m <pathspec> fast <testfile>
  216. X
  217. X    or set an environment variable to a pathspec:
  218. X    (sh)
  219. X    MONITOR=<pathspec>
  220. X    export MONITOR
  221. X    (or csh)
  222. X    setenv MONITOR <pathspec>
  223. X
  224. X    before submitting the job.
  225. X    In both cases, if the pathspec refers to a file, then that will be used as
  226. X    a monitor. If it refers to a directory, then in this case (if the queue is
  227. X    'fast') a file <pathspec>/fast.mon will be used.
  228. X
  229. X    NOTE If the monitor is redirected in this way, then using `qf -m fast`
  230. X    will return either the monitor spec of the running job, or the queue
  231. X    default monitor spec, rather than your personal monitor.
  232. X
  233. X    If you specify a monitor of "MAIL", either through the js -m option, or
  234. X    through your environment, the monitor of the job will be mailed to you.
  235. X
  236. X    This should be enough to get you started and playing with QBATCH, apart
  237. X    from a few brief notes on how to get jobs into queues:
  238. X
  239. X    a. As described above, create a file of jcl and submit it:
  240. X       js fast <jobfile>
  241. X
  242. X    b. As a 'here document'
  243. X       js fast <<here
  244. X       command
  245. X       [..]
  246. X       here
  247. X
  248. X       This is useful when a non-standard job needing more than one command is
  249. X       required, an alternative giving the same functionality is:
  250. X       js fast
  251. X       command
  252. X       [..]
  253. X       ^D
  254. X
  255. X    c. For a single self contained command (e.g. make install) try
  256. X       js -c "make install" fast
  257. X
  258. X    d. For regularly run jobs, try renaming the command (e.g make -> MAKE)
  259. X       and create a script with the original name, and containing either of
  260. X       the above (a or c) calls to js, but calling (e.g.) MAKE.
  261. X
  262. X    e. For jobs run regularly with varying parameters, create a script which
  263. X       creates a job file using substitution paramters ($1, $2 etc), and
  264. X       submits it.
  265. X
  266. X    f. If you have a script which outputs shell script (perl, sed, etc) which
  267. X       you would normally pipe to the shell, try piping it to js instead:
  268. X       <scriptcommand> | js fast
  269. X
  270. X       or:
  271. X       perl <file.pl> | js fast
  272. X
  273. X    This document is NOT meant to be a user manual! It is designed to get you
  274. X    working with the basics of QBATCH as quickly as possible.  Once you have
  275. X    mastered (or at least become competent with) the commands discussed here,
  276. X    then RTFM :-) (to quote a commonly used cliche).
  277. X
  278. X    Alan
  279. END_OF_FILE
  280.   if test 5767 -ne `wc -c <'./doc/quickstart'`; then
  281.     echo shar: \"'./doc/quickstart'\" unpacked with wrong size!
  282.   fi
  283.   # end of './doc/quickstart'
  284. fi
  285. if test ! -d './patches' ; then
  286.     echo shar: Creating directory \"'./patches'\"
  287.     mkdir './patches'
  288. fi
  289. if test ! -d './src' ; then
  290.     echo shar: Creating directory \"'./src'\"
  291.     mkdir './src'
  292. fi
  293. if test -f './src/logging.c' -a "${1}" != "-c" ; then 
  294.   echo shar: Will not clobber existing file \"'./src/logging.c'\"
  295. else
  296.   echo shar: Extracting \"'./src/logging.c'\" \(2735 characters\)
  297.   sed "s/^X//" >'./src/logging.c' <<'END_OF_FILE'
  298. X/****************************************************************************/
  299. X/*                                                                          */
  300. X/*  This file is provided to give a sysop the means to monitor queue        */
  301. X/*  activity, and throughput when the monitors from jobs may be widely      */
  302. X/*  spread (private monitors or mailed monitors). Called as a function from */
  303. X/*  qp (if LOGGING is defined in qbatch.h) it has access to all the global  */
  304. X/*  variables in that program.  The contents of the log file may not suit   */
  305. X/*  the requirements of all system administrators, which is why this is in  */
  306. X/*  a separate file, so that it can be modified to suit.  The general idea  */
  307. X/*  is to provide all available (or required) information relating to jobs  */
  308. X/*  processed in a queue, in a single line format, suitable perhaps for     */
  309. X/*  automatic analysis.                                                     */
  310. X/*                                                                          */
  311. X/****************************************************************************/
  312. X
  313. X#include <stdio.h>
  314. X#include "qbatch.h"
  315. X#ifdef LOGGING
  316. X
  317. XFILE *log;
  318. Xextern struct queue_header * ehead;
  319. Xextern struct queue_entry  * eentry;
  320. Xextern unsigned long q_queued, q_real, q_user, q_system;
  321. Xextern time_t end_time;
  322. Xextern char *queuename;
  323. Xchar buff[128];
  324. Xvoid q_log()
  325. X{
  326. X    /* first let's see if we're logging */
  327. X    if ((ehead->qh_flags & qh_log) == 0) return;
  328. X    /* set up logfile path as SPOOLPATH/<queuename>.log */
  329. X        strcpy (buff, head.qh_spool);
  330. X        if (buff[strlen(buff) -1] != '/') strcat (buff, "/");
  331. X    strcat (buff, queuename);
  332. X    strcat (buff, ".log");
  333. X    log = fopen (buff, "a");
  334. X    if (log == NULL)
  335. X    {
  336. X        /* shouldn't happen, we're running as root remember? */
  337. X        fprintf (stderr, "unable to access %s .. aborting\n", buff);
  338. X        qb_exit (-1);
  339. X    }
  340. X    /* here you can add what you like to the log. I've chosen to put out */
  341. X    /* numbers as decimal representations of their internal forms for    */
  342. X    /* easier computer analysis rather than in human readable form such  */
  343. X    /* as converting dates and times etc.                     */    
  344. X    fprintf (log, "%lu:", ehead->qh_start); /* start time of job (time_t)*/
  345. X    fprintf (log, "%lu:", end_time);        /* end time of job (time_t)*/
  346. X    fprintf (log, "%s:",eentry->qe_uname);  /* user name */
  347. X    fprintf (log, "%d:", eentry->qe_uid);   /* uid */
  348. X    fprintf (log, "%d:", eentry->qe_gid);   /* gid */
  349. X    fprintf (log, "%lu:", q_queued);       /* process times are in 1/100*/
  350. X    fprintf (log, "%lu:", q_real);          /* seconds (subject to the   */
  351. X    fprintf (log, "%lu:", q_user);          /* accuuracy of the clock.   */
  352. X    fprintf (log, "%lu\n", q_system);
  353. X    fclose (log);
  354. X    return;
  355. X}
  356. X#endif /* LOGGING */
  357. END_OF_FILE
  358.   if test 2735 -ne `wc -c <'./src/logging.c'`; then
  359.     echo shar: \"'./src/logging.c'\" unpacked with wrong size!
  360.   fi
  361.   # end of './src/logging.c'
  362. fi
  363. echo shar: End of archive 1 \(of 2\).
  364. cp /dev/null ark1isdone
  365. MISSING=""
  366. for I in 1 2 ; do
  367.     if test ! -f ark${I}isdone ; then
  368.     MISSING="${MISSING} ${I}"
  369.     fi
  370. done
  371. if test "${MISSING}" = "" ; then
  372.     echo You have unpacked both archives.
  373.     rm -f ark[1-9]isdone
  374. else
  375.     echo You still must unpack the following archives:
  376.     echo "        " ${MISSING}
  377. fi
  378. exit 0
  379. exit 0 # Just in case...
  380. -- 
  381. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  382. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  383. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  384. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  385.