Tarea cron primer domingo del mes

Resuelto
splintermik -  
 splintermik -
Hola a todos, aquí está, me gustaría que un comando se ejecute todos los primeros domingos de cada mes

Así que he puesto esto en crontab -e

01 00 1-7 * 0 comando

El problema es que el comando se ejecuta todos los domingos y todos los días del 1 al 7

¿Hay algún otro comando que permita hacerlo una vez, para el primer domingo de cada mes?

Gracias

3 respuestas

  1. HostOfSeraphim Mensajes publicados 7340 Estado Colaborador 1 609
     
    Bonjour,

    Une solution intéressante :

    https://stackoverflow.com/questions/3241086/how-to-schedule-to-run-first-sunday-of-every-month

    00 09 * * 7 [ $(date +\%d) -le 07 ] && /run/your/script

    "la date +%d vous donne le numéro du jour courant et ensuite vous pouvez vérifier si le jour est inférieur ou égal à 7. Si c'est le cas, exécutez votre commande.

    Si vous exécutez ce script uniquement les dimanches, cela devrait signifier qu'il s'exécute seulement le premier dimanche du mois."
    1
    1. splintermik
       
      ¡Gracias por tu respuesta! Entonces, si entiendo bien, [ $(date +\%d) -le 07 ] sirve para ver si la fecha es igual o inferior a 7?

      EDIT: prueba concluyente, ¡muchas gracias!! :D
      0
    2. HostOfSeraphim Mensajes publicados 7340 Estado Colaborador 1 609
       
      Sirve para conocer el número del día en que se ejecuta la tarea. Si configuras la tarea para que se inicie todos los domingos, si el resultado es menor o igual a 7, significa que es el primer domingo del mes. De lo contrario, ya ha habido un domingo en este mes.
      0
  2. HostOfSeraphim Mensajes publicados 7340 Estado Colaborador 1 609
     
    Una solución alternativa, un poco menos limpia (incluso asquerosa):

    Inicializas un archivo 'premierdimanche' a 0.

    Ejecutas tu script todos los domingos y pruebas el contenido de este archivo:

    • si está en 0: ejecutas el contenido del script y cambias el contenido del archivo a 1.
    • si está en 1: tu script ya se ha ejecutado este mes.

    Luego, agregas una tarea el 1 de cada mes para reiniciar este archivo a 0.
    1
    1. splintermik
       
      hum, sí, pero al final la primera solución es la más simple ^^
      0
  3. zipe31 Mensajes publicados 34620 Fecha de registro   Estado Colaborador Última intervención   6 501
     
    Hola,

    Es imposible definir directamente desde los parámetros de la crontab el primer domingo del mes.

    Sin embargo, es posible haciéndolo de forma ingeniosa, como se explica aquí.

    --
    ☯ Zen my nuggets ☮
    Hagan un gesto por el medio ambiente, cierren sus ventanas y adopten un pingüino. <('')
    0
    1. splintermik
       
      gracias por tu respuesta

      acabo de probar con at, así que aquí está el comando

      at now +1 minute /etc/blablabla

      la respuesta que obtuve fue

      error de sintaxis. Último token visto: /
      Hora confusa

      así que intenté: at now +1 minute etc/blablabla

      y obtuve:

      error de sintaxis. Último token visto: e
      Hora confusa

      no entiendo muy bien cómo funciona esto, si es un comando ejecutable únicamente a través de la consola, no es interesante, para poder usarlo automáticamente todos los primeros domingos de cada mes :p
      0
      1. zipe31 Mensajes publicados 34620 Fecha de registro   Estado Colaborador Última intervención   6 501 > splintermik
         
        echo 'echo "Hola" > /tmp/archivo.txt' | at now +1 minutes
        0