home *** CD-ROM | disk | FTP | other *** search
- From: local@crdos1.crd.ge.COM (local software)
- Newsgroups: alt.sources
- Subject: Show pending jobs in HDB uucp
- Message-ID: <2801@crdos1.crd.ge.COM>
- Date: 29 Oct 90 21:58:30 GMT
-
-
- After a job comes in via uucp, and before it is run via uuxqt, it is
- in a state I call "pending." When debugging a system, or just looking
- around, I like to see what's there. Here's my program to do that. Also
- useful when tuning the system to determine how often to run uuxqt from
- cron.
-
- #!/bin/sh
- # shar: Shell Archiver (v1.29)
- #
- # Run the following text with /bin/sh to create:
- # pending.1
- # Makefile
- # pending.c
- #
- sed 's/^X//' << 'SHAR_EOF' > pending.1 &&
- X.TH pending 1 Local
- X.SH NAME
- Xpending \- list jobs pending from a remote site
- X.SH SYNOPSIS
- Xpending remotesite
- X.SH DESCRIPTION
- XThe \fBpending\fP command shows jobs received from a remote site which
- Xhave not yet been processed by uuxqt. There are jobs which will be
- Xexecuted locally at some future time.
- X.SS INSTALLATION
- XThis program will only run from the uucp user (unless you security is
- X\fIvery\fP lax), but may be installed setuid to uucp.
- X.SH EXAMPLES
- X $ pending maxxwell
- X
- X Job User Input File Task
- X crdgw1X0T9Q root crdgw1 D.crdgw1b0T9S rmail stugr02!bob
- X.SH FILES
- X/usr/spool/uucp/site/*
- X.SH SEE ALSO
- Xuustat
- X.SH DIAGNOSTICS
- XCan't get working dir - invalid site name of no directory for this site.
- XCan't start ls - too many processes or /bin/ls missing.
- XCan't open info file - sync error, uuxqt running, or access denied.
- X.SH LIMITATIONS
- XOnly works for HDB uucp.
- X.SH AUTHOR
- XBill Davidsen, davidsen@crdos1.crd.ge.com
- X.SH Copyright
- XCopyright (c) 1988,1990 by Bill Davidsen, All rights reserved. This
- Xprogram and documentation may be freely distributed and used providing
- Xthe copyright notices are kept intact.
- SHAR_EOF
- chmod 0666 pending.1 || echo "restore of pending.1 fails"
- sed 's/^X//' << 'SHAR_EOF' > Makefile &&
- X# makefile for pending command
- X
- X# ================> check everything below this line
- X
- XCFLAGS = -O
- XLFLAGS = -S
- X# remember to use /usr/man/man.LOCAL for SCO
- XMANDIR = /usr/man/man1
- X# This is where you install it, like /usr/lbin, /usr/local/bin,
- X# /local, /u/local/bin or /usr/bin as last resort.
- XBINDIR = /u/local/bin
- X# your local shar program
- XSHAR = shar
- X
- X# ================> stop, you've checked enough
- X
- XBASEFILES = pending.1 Makefile
- XSHARLIST = $(BASEFILES) pending.c
- XSHAROUT = pending.shar
- X
- X# magic makerule for SCCS
- X.c~.c:
- X get $<
- X
- X# default
- Xdefault:
- X @echo "After you have checked the first few lines of the Makefile"
- X @echo "you can type \"make pending\" or \"make install\"."
- X @echo "You can \"make clean\" after the install is done."
- X
- Xpending: pending.o
- X $(CC) -o pending $(LFLAGS) pending.o
- X
- Xinstall: pending pending.1
- X cp pending $(BINDIR)/pending
- X chusr uucp $(BINDIR)/pending
- X chmod 4711 $(BINDIR)/pending
- X
- Xshar: $(SHAROUT)
- X$(SHAROUT): $(SHARLIST)
- X $(SHAR) $(SHARLIST) > $(SHAROUT)
- X
- Xclean:
- X rm -f pending $(SHAROUT)
- X test -f p.pending.c || rm -f pending.c
- X
- X# this is for the author!
- Xzoo: pending.zoo
- XZOOLIST = $(BASEFILES) s.pending.c
- Xpending.zoo: $(ZOOLIST)
- X zoo aunM pending.zoo $?
- SHAR_EOF
- chmod 0644 Makefile || echo "restore of Makefile fails"
- sed 's/^X//' << 'SHAR_EOF' > pending.c &&
- X/* list pending HDB requests from a site */
- X
- X#include <stdio.h>
- X
- X#define HDBdir "/usr/spool/uucp"
- X#define EOS '\0'
- X
- Xstatic char *IDent[] = {
- X "@(#)pending.c v1.2, 10/29/90"
- X "Copyright 1988 by Bill Davidsen, all rights reserved",
- X "May be freely distributed and used providing copyright",
- X "notices are kept intact."
- X};
- X
- Xmain(argc,argv)
- Xint argc;
- Xchar *argv[];
- X{
- X char dirname[1024], filename[32], dataline[132];
- X char xfilename[32], wkfilename[132], *DummY = IDent[0];
- X int slen; /* string length */
- X int first1 = 1; /* flag for 1st time thru */
- X FILE *lsout, *popen(), *xfile, *fopen();
- X
- X /* test input */
- X if (argc != 2) {
- X fprintf(stderr, "Format:\n pending SYSname\n\n");
- X exit(1);
- X }
- X
- X sprintf(dirname, "%s/%s", HDBdir, argv[1]);
- X if (chdir(dirname)) {
- X perror("Can't get working dir");
- X exit(1);
- X }
- X
- X lsout = popen("ls X.* 2>&1", "r");
- X if (lsout == NULL) {
- X perror("Can't start ls");
- X exit(1);
- X }
- X
- X filename[31] = EOS;
- X /* loop checking files */
- X while (fgets(filename, 31, lsout)) {
- X if (strlen(filename) > 30) {
- X fprintf(stderr, "filename too long\n");
- X exit(1);
- X }
- X
- X /* see if there's a file found */
- X sscanf(filename, "%s", xfilename);
- X if (strncmp(xfilename, "X.*", 3) == 0) {
- X fprintf(stderr, "No jobs pending\n");
- X exit(0);
- X }
- X
- X /* open the file for reading */
- X xfile = fopen(xfilename, "r");
- X if (xfile == NULL) {
- X perror("Can't open info file");
- X exit(1);
- X }
- X
- X /* check for header needed */
- X if (first1) {
- X first1 = 0;
- X printf("\n %-15s %-15s %-15s %s\n",
- X "Job", "User", "Input File", "Task");
- X }
- X
- X /* scan the file for various things */
- X printf("%-15s ", xfilename+2);
- X dataline[131] = EOS;
- X while (fgets(dataline, 131, xfile)) {
- X if ((slen = strlen(dataline)) > 130) {
- X /* line too long */
- X while (getc(xfile) != '\n');
- X }
- X dataline[slen-1] = EOS;
- X
- X switch (dataline[0]) {
- X case 'U': /* originating user */
- X printf("%-15s ", dataline+2);
- X break;
- X case 'C': /* command */
- X printf("%s\n", dataline+2);
- X break;
- X case 'I': /* input file */
- X printf("%-15s ", dataline+2);
- X break;
- X }
- X }
- X
- X /* clean up */
- X fclose(xfile);
- X }
- X
- X pclose(lsout);
- X exit(0);
- X}
- X/* tabs=4 */
- SHAR_EOF
- chmod 0444 pending.c || echo "restore of pending.c fails"
- exit 0
-