La gestió d'errors és una part fonamental de qualsevol llenguatge de programació, i el Digital Command Language (DCL) d'OpenVMS no és una excepció. En aquest tema, aprendrem com detectar, gestionar i respondre als errors en els scripts de DCL. Això inclou l'ús de variables de sistema, comandes de control de flux i tècniques per assegurar que els scripts siguin robustos i fiables.
Conceptes Clau
-
Variables de Sistema per a la Gestió d'Errors:
STATUS
: Conté el codi de retorn de l'última comanda executada.SEVERITY
: Conté el nivell de severitat de l'últim error (0 per a èxit, 1 per a advertència, 2 per a error, etc.).
-
Comandes de Control de Flux:
ON
: Defineix accions a realitzar en cas d'error.IF
: Permet condicionar l'execució de comandes basant-se en el valor deSTATUS
oSEVERITY
.
-
Tècniques de Gestió d'Errors:
- Captura d'errors.
- Registre d'errors.
- Recuperació d'errors.
Variables de Sistema per a la Gestió d'Errors
STATUS i SEVERITY
Les variables STATUS
i SEVERITY
són fonamentals per a la gestió d'errors en DCL. Aquestes variables es poden utilitzar per determinar si una comanda s'ha executat correctament o si ha fallat, i per prendre decisions basades en aquesta informació.
$ RUN MYPROGRAM $ IF $STATUS .NE. 1 THEN GOTO ERROR_HANDLER $ EXIT $ ERROR_HANDLER: $ WRITE SYS$OUTPUT "S'ha produït un error en executar MYPROGRAM" $ EXIT
En aquest exemple, si MYPROGRAM
falla, el codi de retorn no serà 1, i el flux del programa saltarà a l'etiqueta ERROR_HANDLER
.
Comandes de Control de Flux
ON
La comanda ON
permet definir accions específiques a realitzar quan es produeix un error. Això és útil per centralitzar la gestió d'errors en un punt del script.
$ ON ERROR THEN GOTO ERROR_HANDLER $ RUN MYPROGRAM $ EXIT $ ERROR_HANDLER: $ WRITE SYS$OUTPUT "S'ha produït un error en executar MYPROGRAM" $ EXIT
IF
La comanda IF
es pot utilitzar per condicionar l'execució de comandes basant-se en el valor de STATUS
o SEVERITY
.
$ RUN MYPROGRAM $ IF $SEVERITY .GE. 2 THEN GOTO ERROR_HANDLER $ EXIT $ ERROR_HANDLER: $ WRITE SYS$OUTPUT "S'ha produït un error en executar MYPROGRAM" $ EXIT
Tècniques de Gestió d'Errors
Captura d'Errors
Capturar errors implica detectar quan es produeix un error i prendre mesures per gestionar-lo. Això es pot fer utilitzant les variables STATUS
i SEVERITY
juntament amb les comandes ON
i IF
.
Registre d'Errors
Registrar errors és una pràctica recomanada per mantenir un registre dels problemes que es produeixen durant l'execució dels scripts. Això es pot fer escrivint missatges d'error a un fitxer de registre.
$ ON ERROR THEN GOTO ERROR_HANDLER $ RUN MYPROGRAM $ EXIT $ ERROR_HANDLER: $ OPEN/WRITE LOGFILE ERROR.LOG $ WRITE LOGFILE "Error executant MYPROGRAM: ", $STATUS $ CLOSE LOGFILE $ EXIT
Recuperació d'Errors
La recuperació d'errors implica prendre mesures per corregir o mitigar els efectes d'un error. Això pot incloure la reexecució de comandes, la neteja de recursos o la notificació a l'usuari.
$ ON ERROR THEN GOTO ERROR_HANDLER $ RUN MYPROGRAM $ EXIT $ ERROR_HANDLER: $ WRITE SYS$OUTPUT "S'ha produït un error. Intentant de nou..." $ RUN MYPROGRAM $ IF $STATUS .NE. 1 THEN GOTO FINAL_ERROR $ EXIT $ FINAL_ERROR: $ WRITE SYS$OUTPUT "Error persistent. Contacteu amb l'administrador." $ EXIT
Exercici Pràctic
Exercici
Crea un script DCL que executi un programa anomenat DATA_PROCESSOR
. Si el programa falla, el script ha de registrar l'error en un fitxer anomenat ERROR.LOG
i intentar executar el programa de nou. Si el programa falla dues vegades consecutives, el script ha de mostrar un missatge d'error i finalitzar.
Solució
$ ON ERROR THEN GOTO ERROR_HANDLER $ RUN DATA_PROCESSOR $ IF $STATUS .EQ. 1 THEN EXIT $ ERROR_HANDLER: $ OPEN/WRITE LOGFILE ERROR.LOG $ WRITE LOGFILE "Error executant DATA_PROCESSOR: ", $STATUS $ CLOSE LOGFILE $ WRITE SYS$OUTPUT "S'ha produït un error. Intentant de nou..." $ RUN DATA_PROCESSOR $ IF $STATUS .EQ. 1 THEN EXIT $ WRITE SYS$OUTPUT "Error persistent. Contacteu amb l'administrador." $ EXIT
Conclusió
La gestió d'errors en DCL és essencial per crear scripts robustos i fiables. Utilitzant les variables de sistema STATUS
i SEVERITY
, juntament amb les comandes ON
i IF
, podem detectar i gestionar errors de manera efectiva. A més, les tècniques de captura, registre i recuperació d'errors ens ajuden a mantenir els nostres scripts funcionant correctament fins i tot en situacions inesperades.
Curs de Programació OpenVMS
Mòdul 1: Introducció a OpenVMS
- Què és OpenVMS?
- Història i Evolució d'OpenVMS
- Conceptes Bàsics i Terminologia
- Visió General de l'Arquitectura del Sistema
- Instal·lació i Configuració
Mòdul 2: Comandes Bàsiques d'OpenVMS
- Introducció a DCL (Digital Command Language)
- Comandes de Gestió de Fitxers
- Comandes de Gestió de Processos
- Comandes de Gestió del Sistema
- Ús de l'Ajuda i la Documentació
Mòdul 3: Sistema de Fitxers d'OpenVMS
- Estructura del Sistema de Fitxers
- Tipus i Atributs de Fitxers
- Operacions amb Fitxers
- Gestió de Directoris
- Control d'Accés i Seguretat
Mòdul 4: Scripting amb DCL
- Introducció al Scripting amb DCL
- Variables i Tipus de Dades
- Estructures de Control
- Subrutines i Funcions
- Gestió d'Errors
Mòdul 5: Gestió del Sistema OpenVMS
- Gestió de Comptes d'Usuari
- Gestió de Discs i Volums
- Procediments de Còpia de Seguretat i Restauració
- Monitorització del Sistema i Optimització del Rendiment
- Gestió de Parches i Actualitzacions
Mòdul 6: Xarxes a OpenVMS
- Conceptes Bàsics de Xarxes
- Configuració de TCP/IP
- Configuració de DECnet
- Serveis i Protocols de Xarxa
- Resolució de Problemes de Xarxa
Mòdul 7: Programació Avançada a OpenVMS
- Introducció als Llenguatges de Programació d'OpenVMS
- Ús de C a OpenVMS
- Ús de Fortran a OpenVMS
- Ús de COBOL a OpenVMS
- Interfície amb Serveis del Sistema
Mòdul 8: Clúster d'OpenVMS
- Introducció als Clústers
- Configuració i Gestió de Clústers
- Comunicació en Clúster
- Failover i Equilibri de Càrrega
- Seguretat en Clúster
Mòdul 9: Seguretat a OpenVMS
- Conceptes de Seguretat i Millors Pràctiques
- Autenticació i Autorització d'Usuaris
- Auditoria i Monitorització
- Xifrat de Dades
- Resposta i Recuperació d'Incidents