LinuxParty
Estoy tratando de ejecutar un script el último sábado de cada mes.
Un pensamiento rápido que tuve fue
# For details see man 4 crontabs # Example of job definition: # .---------------- minutos (0 - 59) # | .------------- horas (0 - 23) # | | .---------- dias del mes (1 - 31) # | | | .------- mes (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- día de la semana (0 - 6) (Sunday=0 o 7) O sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 1 0 24-31 * 6 /algunos/script.sh
Pero me di cuenta de que en julio de este año mi script se ejecutaría dos veces. Al mismo tiempo en abril de ese año mi script no se ejecutaría algunos años
No sé si cualquier otro año dado hubiera tenido ambas excepciones, pero me alegro de no haber confiado demasiado en seguir adelante con ninguno de los planes anteriores.
Así que decidí descender a la locura. Encontré un caso de prueba en la línea crontab que me gustó un poco (en lugar de modificar mi script) y les estoy pasando mi implementación como una verificación de cordura...
01 00 * * 6 [ `date +%d` -eq `echo \`cal | awk '{print $7}'\` | awk '{print $NF}'` ] && /some/script.sh
cal | awk '{print $7}' debería mostrar la fecha de los sábados del mes actual (con la probable excepción del primer sábado, pero solo me preocupa el último). Quiero quedarme con $7 en lugar de $NF por lo que es el mismo procedimiento para el domingo pasado ($1), lunes ($2), etc...
echo `cal | awk '{print $7}'` | awk '{print $NF}' debería mostrar el último valor de la lista de todos los sábados del mes actual.
Finalmente, una verificación de prueba de la fecha actual es igual al valor del último sábado y, si es cierto, ejecute el script.
Otra opción también sencilla es:
01 0 * * * /comandos/ejecutar-si-el-ultimo-sabado.sh /algun/comandos.sh
Y éste sería el script que lo comprueba.
#!/bin/bash # # Javier Orovengua - Versión 2.0 # # Día de la semana (nominativo) WDAY=$(date +%A) # Día del mes (numérico) MDAY=$(date +%d) # Hay veces que los Linux Servers tienen los días de la semana en español, lo ajustamos doblemente. if [ $WDAY = "Saturday" -o $WDAY = "Sábado" -o $WDAY = "saturday" -o $WDAY = "sábado" ] && [ $MDAY -ge 25 ] # Para hacer pruebas... # if [ $WDAY = "Thursday" -o $WDAY = "thursday" -o $WDAY = "Jueves" -o $WDAY = "jueves" ] && [ $MDAY -ge 25 ] then echo "Último sábado del mes" # Cosas que tiene que hacer este día. else echo "No es último sábado del mes" # Nada que hacer. fi

-
Software
- RustDesk la alternativa a TeamViewer y AnyDesk para Windows, Linux y Mac
- Rustdesk [Escritorio remoto]: una alternativa de TeamViewer y AnyDesk para Linux
- Joomla 6, ¿Qué hay para ti?
- Suiza ahora exige que todo el software gubernamental sea de código abierto
- ¿Qué significa la IA de código abierto, de todos modos?
- La importancia de los diseñadores para conseguir un photocall personalizado impactante
- Disponible ONLYOFFICE Docs 8.0: formularios PDF, RTL, Buscar, asistente de gráficos, plugins actualizada y más
- 14 mejores sistemas operativos para Internet de las cosas (IoT)
- Cómo instalar Odoo 15 en CentOS 8 y 9 / AlmaLinux 8 y 9
- ONLYOFFICE lanza la versión 7.4 de su suite ofimática, con nuevas funciones y mejoras en la experiencia del usuario
- Cómo crear un servicio Systemd en Linux
- Los programas no libres son una amenaza para la libertad de todos - Richard Stallman
- Cómo crear formularios rellenables con roles de usuario en ONLYOFFICE Docs
- Alternativas a gratuitas a Adobe Photoshop, InDesign e Illustrator
- Convertir Aplicaciones Web en Apps de Escritorio con WebCatalog