1.3 - Ejecución en el último día del mes
1.2.1 Descripción
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.
Primer ejemplo: el método de shell
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 a1
, 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 a1
, finaliza el script.
Ejemplo dos: el método Perl
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 arregloTHE_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
.
Razón
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.
Experiencia en el mundo real
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.
Otras fuentes
Páginas del manual:
localtime, tzset, tzfile, crontab