Amministrare un AS/400: come funziona il sistema Capitolo 7 di 10

Messaggi, QSYSOPR e job log

Rivista il Verificata su IBM i 7.5

Accedi per salvare

Su altri sistemi si va a cercare i log in una cartella. Qui i messaggi finiscono in code di messaggi: ogni job ne ha una, ogni utente ne ha una, e il sistema ne ha alcune che riguardano tutti.

Il vantaggio è che ogni messaggio sa da dove viene: quale programma, quale job. Il prezzo è che bisogna sapere in quale coda guardare.

Le code che contano

  • QSYSOPR: la coda dell'operatore di sistema. Ci arriva ciò che il sistema vuole far sapere a chi conduce la macchina.
  • QSYSMSG: una coda facoltativa per un elenco preciso di messaggi gravi. Non esiste finché non la si crea in QSYS.
  • La coda dell'utente: una per profilo, dove arrivano i messaggi indirizzati a quella persona.
  • La coda del job: da cui si ricava il registro del singolo lavoro, il job log.
DSPMSG MSGQ(QSYSOPR)
WRKMSGQ

QSYSMSG

Quando QSYSMSG esiste e non è danneggiata, IBM manda lì alcuni messaggi gravi: certi al posto di QSYSOPR, certi anche a QSYSOPR. Uno degli esempi della documentazione è CPF0907, la condizione di spazio su disco grave. Si crea così, e da quel momento il sistema comincia a usarla:

CRTMSGQ MSGQ(QSYS/QSYSMSG) TEXT('Messaggi gravi del sistema')

Avvertenza

proprio perché alcuni messaggi vanno lì invece che in QSYSOPR, chi crea QSYSMSG deve guardarla. IBM lo dice chiaro: non va creata se non si vuole ricevere quei messaggi. Il modo previsto è un programma che la legge come programma di gestione dei messaggi in arrivo, e rimanda altrove quelli che non richiedono un'azione.

Messaggi che aspettano una risposta

Alcuni messaggi sono di richiesta: il job che li ha mandati si ferma finché qualcuno non risponde. Si vedono in DSPMSG e si risponde sulla riga; le risposte accettate le dice il messaggio stesso.

Chi risponde quando nessuno guarda lo decide l'attributo INQMSGRPY del job, che si dà nella descrizione di job o con CHGJOB:

Valore Che cosa succede
*RQD serve una risposta: il job aspetta
*DFT risponde il sistema con la risposta predefinita del messaggio
*SYSRPYL il sistema cerca il messaggio nell'elenco delle risposte (ADDRPYLE); se non lo trova, serve una risposta

*SYSRPYL è la strada più controllata, perché dice quale risposta dare a quale messaggio e lascia in attesa tutti gli altri. ADDRPYLE è distribuito con il pubblico a *EXCLUDE: lo usa QPGMR, o chi ha ricevuto *USE sul comando.

ADDRPYLE SEQNBR(10) MSGID(RPG1241) RPY(G)
WRKRPYLE

È il primo esempio della pagina IBM del comando: a ogni RPG1241 (record non trovato) mandato da un job che usa l'elenco, il sistema risponde G senza fermarsi. Messaggio e risposta vanno scelti sul proprio caso, leggendo il secondo livello del messaggio.

Consiglio

una risposta automatica a tutto non è prudente: un messaggio a cui si risponde da soli è un messaggio che nessuno legge più.

Il job log

Ogni job scrive il proprio registro. Finché il job è vivo:

DSPJOBLOG JOB(123456/MROSSI/CHIUSURA)

In SQL, con una riga per messaggio, c'è QSYS2.JOBLOG_INFO. Il primo messaggio grave di un job:

SELECT MESSAGE_TIMESTAMP, MESSAGE_ID, SEVERITY, MESSAGE_TEXT, FROM_PROGRAM
  FROM TABLE(QSYS2.JOBLOG_INFO('123456/MROSSI/CHIUSURA'))
 WHERE SEVERITY >= 30
 ORDER BY ORDINAL_POSITION
 FETCH FIRST 1 ROW ONLY

ORDINAL_POSITION numera i messaggi nell'ordine in cui sono arrivati. Serve il diritto speciale *JOBCTL, oppure essere l'utente del job.

Quando il job è finito, il registro diventa un file di spool, QPJOBLOG, nella coda di uscita del job: per questo i job log si cercano in WRKSPLF. In SQL lo legge SYSTOOLS.SPOOLED_FILE_DATA, che IBM dà come esempio costruito su CPYSPLF:

SELECT SPOOLED_DATA
  FROM TABLE(SYSTOOLS.SPOOLED_FILE_DATA(
       JOB_NAME          => '123456/MROSSI/CHIUSURA',
       SPOOLED_FILE_NAME => 'QPJOBLOG'))
 WHERE SPOOLED_DATA LIKE '%CPF%'

Quanto scrive, e quando non lo scrive

Il parametro LOG della descrizione di job ha tre parti: livello (0-4), gravità minima, e testo. Il valore di serie di CRTJOBD è LOG(4 0 *NOLIST).

Terza parte Che cosa produce
*NOLIST se il job finisce bene, nessun job log; se finisce male (codice di fine 20 o più), un job log con testo e spiegazione
*MSG solo il testo dei messaggi
*SECLVL il testo e il secondo livello, con causa e rimedio

Per questo un lavoro andato a buon fine spesso non lascia nessun job log: non è un guasto, è *NOLIST. Chi lo vuole sempre mette *SECLVL nella descrizione di job.

C'è poi un secondo parametro, LOGOUTPUT, che decide chi produce la stampa. Il valore viene dal valore di sistema QLOGOUTPUT, che di serie la fa produrre al job stesso (*JOBEND); IBM consiglia *JOBLOGSVR, il server dei job log. Con *PND la stampa non si produce: il job log resta in sospeso, si vede con DSPJOBLOG e si stampa dopo con CHGJOB. IBM lo presenta come modo di risparmiare processore e spazio sui job log inutili.

Avvertenza

i job log e le stampe che non servono più vanno cancellati. Di serie lo fa periodicamente Operational Assistant, che toglie anche i job log in sospeso.

Leggere un errore

Ogni messaggio ha un codice, come CPF9801 o MCH3601, e il codice ha una spiegazione a due livelli: il testo breve, e il secondo livello che dice causa e rimedio. In DSPJOBLOG si porta il cursore sulla riga e si preme F1.

Le tre lettere iniziali dicono da dove viene. Alcuni prefissi dalla documentazione di ADDMSGD:

Prefisso Che cosa è
CPF sistema operativo, fine anomala
CPD sistema operativo, diagnosi
CPI sistema operativo, informazione
CPA sistema operativo, serve un intervento dell'operatore
MCH interfaccia macchina

I messaggi CPF, MCH, RNQ e SQL hanno una pagina per codice in Errori.

Consiglio

in un job log lungo, l'ultimo messaggio di solito descrive la fine, non la causa. Conviene partire dal primo messaggio grave, come fa la query qui sopra, e leggere in avanti da lì.

Fonti

Torna all'indice della guida

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati