CodeGym /Corsi /Docker SELF /Scrivere uno script bash semplice per automatizzare i com...

Scrivere uno script bash semplice per automatizzare i compiti usando cron

Docker SELF
Livello 3 , Lezione 6
Disponibile

Scrivere uno script bash semplice per automatizzare i compiti usando cron

1. Definizione del task

Oggi scriviamo uno script pratico, che controlla la disponibilità di un sito e registra il risultato in un file di log, per poi automatizzarne l'esecuzione usando cron.

Cosa vogliamo fare?

Creeremo uno script bash che:

  1. Controlla la disponibilità di un sito specifico usando ping.
  2. Scrive il risultato del controllo in un file di log, includendo data e ora.
  3. Esegue automaticamente questo script ogni 5 minuti tramite cron.

Perché è importante?

Nel mondo reale, monitorare la disponibilità di siti web e server è una delle principali attività degli amministratori di sistema. Ad esempio, se il tuo sito (o server) improvvisamente smette di rispondere, vuoi saperlo il prima possibile. Questo tipo di scenario è utile non solo per il monitoraggio, ma anche durante colloqui o nella pratica lavorativa.


2. Passo 1: Scrivere un semplice script bash

Iniziamo con la scrittura dello script bash principale. Ecco una spiegazione passo passo di cosa farà lo script:

  1. Definiamo l'indirizzo del sito da controllare.
  2. Usiamo ping per tentare di inviare una richiesta al server.
  3. Controlliamo se è stata ricevuta una risposta disponibile.
  4. Salviamo il risultato in un file di log.

Creiamo il file site_check.sh:

#!/bin/bash

# Definiamo l'indirizzo del sito web
WEBSITE="example.com"

# File per registrare i risultati
LOG_FILE="/var/log/site_status.log"

# Controlliamo la disponibilità del sito usando ping
if ping -c 1 $WEBSITE &> /dev/null; then
    # Se il sito è disponibile
    echo "$(date): $WEBSITE è raggiungibile" >> $LOG_FILE
else
    # Se il sito non è disponibile
    echo "$(date): $WEBSITE non è raggiungibile" >> $LOG_FILE
fi

Spiegazione del codice:

  1. #!/bin/bash — indica che questo script deve essere eseguito usando Bash.
  2. WEBSITE="example.com" — l'indirizzo del sito da controllare. Puoi sostituire example.com con qualsiasi sito o server che desideri monitorare.
  3. ping -c 1 $WEBSITE — invia un pacchetto (-c 1) al sito indicato. Se il sito risponde, il comando si completa con codice 0. Altrimenti, viene restituito un errore.
  4. &> /dev/null — reindirizza l'output standard e gli errori nel "buco nero" (non vogliamo vedere l'output di ping nella console).
  5. $(date) — aggiunge data e ora correnti al messaggio.
  6. >> $LOG_FILE — scrive il risultato alla fine del file di log.

3. Passo 2: Avvio manuale dello script

Prima di automatizzare l'esecuzione dello script, assicuriamoci che funzioni.

  1. Salva lo script in un file chiamato site_check.sh.

  2. Rendilo eseguibile:

    chmod +x site_check.sh
    
  3. Eseguilo:

    sudo ./site_check.sh
    

Dopo l'esecuzione dello script, apri il file /var/log/site_status.log per verificare che il risultato del controllo sia stato aggiunto al log. Usa il comando:

cat /var/log/site_status.log

Se tutto funziona correttamente, dovresti vedere una riga come questa:

Mon Oct 30 14:35:22 UTC 2023: example.com è raggiungibile

4. Passo 3: Configurazione dell'esecuzione automatica con cron

Sappiamo già che cron consente di eseguire attività pianificate. Ora configureremo cron, in modo che il nostro script venga eseguito ogni 5 minuti.

Modifica del crontab

Apri l'editor di crontab:

crontab -e

Aggiungi la seguente riga:

*/5 * * * * /path/to/site_check.sh

Spiegazione:

  • */5 — indica che l'attività deve essere eseguita ogni 5 minuti.
  • /path/to/site_check.sh — il percorso completo del nostro script. Assicurati che sia corretto. Ad esempio, se lo script si trova nella directory home dell'utente, il percorso sarà qualcosa come /home/your_username/site_check.sh.

Dopo aver salvato le modifiche, cron inizierà a eseguire lo script ogni 5 minuti. Per verificare che l'attività sia stata aggiunta, esegui:

crontab -l

5. Passo 4: Testare il funzionamento di cron

Ora vediamo se l'automazione funziona. Aspetta 5-10 minuti e riapri il file dei log:

cat /var/log/site_status.log

Dovresti vedere nuove righe che si aggiornano ogni 5 minuti. Per esempio:

Mon Oct 30 14:35:22 UTC 2023: example.com è raggiungibile
Mon Oct 30 14:40:22 UTC 2023: example.com è raggiungibile
Mon Oct 30 14:45:22 UTC 2023: example.com è raggiungibile

6. Analisi di domande ed errori comuni

  1. Ping restituisce errore 'Permission denied'

    Se esegui lo script come utente normale, potrebbe non avere abbastanza permessi. Esegui lo script con sudo oppure aggiungi i permessi di esecuzione.

  2. Il file di log non viene creato

    Assicurati che il percorso al file di log (/var/log/site_status.log) sia corretto e che il tuo utente abbia i permessi di scrittura in questa directory. Se il file non esiste, crealo manualmente usando:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron non avvia lo script

    Verifica se il servizio cron è attivo:

    sudo systemctl status cron
    

    Dovrebbe essere nello stato active (running). Se è fermo, avvialo:

    sudo systemctl start cron
    
  4. Lo script non viene eseguito da cron, ma funziona manualmente

    Assicurati che il percorso dello script e di tutti i file utilizzati sia scritto completamente. Nei task cron, le variabili di ambiente (ad esempio $PATH) possono essere diverse. È meglio usare percorsi assoluti.


7. Miglioramenti e compiti aggiuntivi

Filtraggio dei siti web

Espandi lo script in modo che controlli la disponibilità di più siti. Per esempio:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE è raggiungibile" >> $LOG_FILE
    else
        echo "$(date): $SITE non è raggiungibile" >> $LOG_FILE
    fi
done

Invio di notifiche

Aggiungi l'invio di notifiche se un sito non è disponibile. Ad esempio, usando il comando mail per inviare un'email:

# Notifica via email
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE non è raggiungibile!" | mail -s "Website Check Alert" your_email@example.com
fi

Logging ciclico

Limita la dimensione del file di log a, ad esempio, 1 MB. Se il file diventa troppo grande, rinominalo (come archivio) e avvia un nuovo log.


Congratulazioni! Ora sai come usare gli script bash e cron per automatizzare compiti reali. Queste competenze sono particolarmente richieste per i DevOps ingegneri e gli amministratori di sistema.

1
Опрос
Servizi Linux,  3 уровень,  6 лекция
недоступен
Servizi Linux
Servizi Linux
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION