Usando Cal en Crontab
8 Apr
En estos dias me todo programar una tarea que deseo que se ejecute el último día de cada mes, despues de mucho buscar en internet, consegui hacerlo de la forma que quería haciendo uso de crontab, aunque como muchos sabrán por los parametros tradicionales no se puede programar una tarea para ser ejecutada el último dia de cada mes ya que según cron tenemos los siguientes parametros:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +—– day of week (0 – 6) (Sunday=0)
| | | +——- month (1 – 12)
| | +——— day of month (1 – 31)
| +———– hour (0 – 23)
+————- min (0 – 59)
Como podemos observar podriamos decirle que ejecute una tarea le dia 1, 2,3,4,5 …. todos los meses.
Ahora bien mi situacion fue la siguiente yo necesito que el útimo día de cada mes se muevan los archivos de cierto directorios creados a lo largo de todo el día a un directorio de históricos.
Para realizar esta tarea encontre una forma que no sabía que era posible y es insertando un if en el cron de la siguiente forma:
0 23 * * * [ $(date +\%d) -eq $(echo $(cal) | awk '{print $NF}') ] && script.sh
De esta forma el cron todos los dias a las 11pm verificara si la fecha actual es igual al último día de ser correcta esta afirmación pues ejecutará nuestro script.
Un pequeño ejemplo de este script podria ser el siguiente:
#!/bin/bash
fecha=$(date ‘+%Y%m%d’)
echo ” ”
echo Moviendo Archivos a Historico …..
mes_actual=$(date ‘+%b%y’)# Se Crea el directorio del Mes actual
mkdir /mnt/historico_respaldos/$mes_actualfind /dir_queremos_examinar/$i -daystart -mtime 0 -exec rsync -v {} /dir_remoto/$mes_actual/ \; >> ${fecha}_historico.log
echo ” “;
echo “————————————————————————-”;
done
Espero que les sea útil este pequeño script.
