1.3 - Ejecución en el último día del mes

Este comanod determina si mñana será el primer día del próximo mes. si descubre que así es, podrá ejecutar un script o programa definido.

Sintaxis: TZ={GMT | PST | EDT | …} -24 date +%d

TZ es una variable reservada de zona horaria del sistema UNIX. Simplemente indíquele a TZ qué día será mañana agregando un día a la fecha actual (+%d). Si hoy es el último día del mes (esto es, el día 31), TZ reconocerá que mañana es el primer día del siguiente mes.

TZ=PST -24 date +%d

Entonces puede incluirse lo siguiente para ejecutar un programa si el resultado de TZ es 1.

#!/bin/sh

FILE= `runme`
if test `TZ=PST -24 date +%d` = 1; then
    $FILE
fi
  • Línea 1: Determina el script de shell que se utilizará (en este caso, el shell Bourne)
  • Línea 2: Configura una variable con el nombre del programa a ejecutar.
  • Línea 3: Si el valor resultante de TZ es igual a 1, hoy es el último día del mes.
  • Línea 5: Dado que hoy es el último día del mes, ejecuta el programa almacenado en la variable FILE
  • Línea 6: Si el resultado de TZ no es igual a 1, finaliza el script.

He aquí un método genérico que utiliza un script de Perl para lograr los mismos resultados del ejemplo anterior. Éste puede incrustarse dentro de un programa Perl más grande, para evitar generar otro proceso.

#! /usr/bin/perl

use POSIX;

@THE_DATE = localtime (time);
++$THE_DATE[3];
if ((localtime (POSIX::mktime (@THE_DATE)))[3] == 1 ) {
       exit 0;
}
exit 1;
  • Línea 1: Define que se usará un script Perl.
  • Línea 3: Usa el módulo POSIX.
  • Línea 5: Toma la hora local y llena el arreglo THE_DATE.
  • Línea 6: Agrega un día a la fecha.
  • Línea 7: Utiliza mktime parda normalizar la fecha en el arreglo THE_DATE. Comprueba si el día se ha convertido en el primero del siguiente mes.
  • Línea 8: Si hoy es el primer día del siguiente mes, sale con un estado de 1.
  • Línea 10: De lo contrario, da como resultado un estado de salida 0.

Habrá ocaciones en las que ustede necesite ejecutar programas (como respaldos completos, trabajos de procesamiento por lotes, filtrado de archivos de registro o de utilización del sistema) en el último día del mes. A primera vista, tal vez pinese que se trata de una tarea fácil. ¿Porqué molestarse en usar scripts? ¿Porque no establecer una linea de crontab? Es mejor utilizar un script como éste, ya que cron presenta un problema: solo permite la ejecución en cualquiera o todos los días del 1 al 31, pero no puede determinar cuál es el último día de cada mes, por lo que usted debe encontrar la manera de calcularlo.

Este pequeño truco ha sido de ayuda en incontables ocaciones. Es muy sencillo adjuntarlo a scripts existentes para enviar mensualmente a la administración y a los usuarios, registros, uso de discos y acceso de usuarios, junto con otra información útil. Es agradable escuchar a sus usuarios o a su jefe agradecerle el tiempo extra que invierte en la elaboración de los reportes cada mes. Ellos ni se imaginan lo fácil que es.