El demonio cron facilita las ejecuciones programadas cuando se trata del primer día del mes. Sin embargo para el último día de cada mes hay que usar un poco de ingenio y otras herramientas del sistema. Una manera:
30 23 * * * [[ $(date +'%d') -eq $(cal | awk '!/^$/{ print $NF }' | tail -1) ]] && /ruta/absoluta/al/script 1>/dev/null 2>&1
Que cada día a las 2330 comprobará si se trata del último día del mes:
- Obtiene el día del mes.
- Obtiene el calendario del mes actual.
- Extrae el final de cada línea del calendario.
- Se queda con la última de esas líneas.
- Si el día actual es igual al último día del mes obtenido, se ejecuta lo que le digamos y las salidas las manda a /dev/null.
Fuente → The UNIX and Linux Forums.