Come eseguire un Cron Job una sola volta a un orario specifico?

Pubblicato 17 ottobre 2024

Problema: Eseguire Un'Attività Cron Una Sola Volta Ad Un Orario Specifico

Le attività cron sono solitamente configurate per essere eseguite ripetutamente a orari programmati. Tuttavia, a volte è necessario eseguire un'attività solo una volta ad un orario specifico. Questo può essere complicato quando si configura cron per eseguire un'attività singola e specifica nel tempo senza ripeterla.

Soluzioni Per Eseguire Attività Cron Una Sola Volta Ad Un Orario Specifico

Utilizzo del Comando 'at' Per La Programmazione Una Tantum

Il comando 'at' pianifica attività una tantum. Puoi impostare un orario futuro per l'esecuzione di un comando. La sintassi è:

echo "/percorso/del/comando opzioni" | at [orario]

Per eseguire un comando domani:

echo "/usr/bin/mio_comando" | at now + 1 day

Suggerimento: Verifica Delle Attività Programmate

Usa il comando 'atq' per elencare tutte le attività programmate. Questo ti aiuta a confermare che la tua attività sia stata programmata con successo e a visualizzarne il numero in coda per eventuali modifiche o cancellazioni.

Attività Cron Con Script Auto-Disabilitante

Se 'at' non è disponibile, crea uno script auto-disabilitante:

  1. Configura un'attività cron con un orario specifico:

    0 0 2 12 * /percorso/del/tuo_script.sh
  2. Crea uno script che si esegue solo una volta:

    #!/bin/bash
    
    SCRIPT="/percorso/del/tuo_script.sh"
    MARKER="${SCRIPT}.done"
    
    if [ -f "$MARKER" ]; then
     exit 0
    fi
    
    # La tua attività una tantum qui
    echo "Attività eseguita" | mail -s "Attività una tantum completata" utente@esempio.com
    
    touch "$MARKER"

Questo script verifica l'esistenza di un file marker ed esce se esiste, impedendo esecuzioni multiple.

Utilizzo Di Cron Con Controllo Della Data

Un altro metodo utilizza il controllo della data:

#!/bin/bash

DATA_ESECUZIONE="2023-12-25"
DATA_CORRENTE=$(date +%Y-%m-%d)

if [ "$DATA_CORRENTE" != "$DATA_ESECUZIONE" ]; then
  exit 0
fi

# La tua attività una tantum qui
echo "Attività festiva eseguita" | mail -s "Attività festiva completata" utente@esempio.com

Questo script esegue l'attività solo nella data impostata, uscendo se la data corrente non corrisponde.

Esempio: Aggiunta Di Log Alle Attività Cron Basate Sulla Data

#!/bin/bash

DATA_ESECUZIONE="2023-12-25"
DATA_CORRENTE=$(date +%Y-%m-%d)
FILE_LOG="/var/log/attivita_una_tantum.log"

if [ "$DATA_CORRENTE" != "$DATA_ESECUZIONE" ]; then
  echo "$(date): Script controllato, ma non eseguito (data errata)" >> "$FILE_LOG"
  exit 0
fi

# La tua attività una tantum qui
echo "Attività festiva eseguita" | mail -s "Attività festiva completata" utente@esempio.com

echo "$(date): Attività eseguita con successo" >> "$FILE_LOG"

Questo esempio aggiunge la registrazione dei log per tenere traccia dei tentativi di esecuzione dello script e dei successi, utile per monitorare e risolvere problemi con le attività cron una tantum.