f in x
Shell Scripting e Automazione Linux — Script, Cron, SSH e Ansible per Server Che Funzionano Davvero
> cd .. / HUB_EDITORIALE > Visualizza in Inglese
Sistemi Operativi & Sicurezza

Shell Scripting e Automazione Linux — Script, Cron, SSH e Ansible per Server Che Funzionano Davvero

[2026-06-22] Author: Ing. Calogero Bono

Avete un server che ogni settimana va in crash perché qualcuno dimentica di fare un backup? Oppure passate ore a ripetere gli stessi comandi su decine di macchine? Noi, di Meteora Web, lo vediamo tutti i giorni: piccole e medie imprese che usano Linux ma trattano la riga di comando come un ripiego, quando invece è il loro più grande acceleratore di produttività.

Da otto anni gestiamo server, deploy e automazioni per clienti in tutta Italia. Siamo nati contabili prima che ingegneri, quindi quando parliamo di automazione parliamo di tempo risparmiato = soldi guadagnati. Un minuto di lavoro manuale ripetuto cento volte è un costo che potresti eliminare con uno script di 5 righe.

Questa pillar page è il nostro punto di riferimento su shell scripting e automazione Linux – nessuna teoria astratta, solo strumenti reali e decisioni concrete. Affronteremo Bash, cron, SSH, sed e awk, systemd timer, Ansible, e perfino quando conviene lasciar perdere Bash e passare a Python.

Se sei un sysadmin, uno sviluppatore o un imprenditore digitale che vuole far funzionare i server senza doverci pensare ogni giorno, qui trovi tutto quello che serve.

Come funziona lo shell scripting in Bash e perché è ancora fondamentale nel 2026

Bash è il collante di ogni sistema Linux. Non è un linguaggio di programmazione elegante, ma è il più diretto per orchestrare comandi di sistema. Se devi spostare file, leggere log, lanciare processi, Bash lo fa in una riga dove Python ne richiederebbe dieci.

Noi usiamo Bash per ogni automazione server: deploy, backup, monitoraggio, rotazione log. La regola è semplice: se lo fai più di una volta, scrivi uno script.

Sponsored Protocol

Variabili, condizioni, cicli e funzioni: le basi che devi conoscere

Uno script Bash non è diverso da un programma: ha variabili (NOME="Mario"), condizioni (if [ -f /etc/passwd ]), cicli (for file in *.log) e funzioni (function fail() { echo "Errore: $1"; exit 1; }).

L’errore più comune? Non mettere set -e all’inizio. Senza, lo script continua anche se un comando fallisce. Noi lo mettiamo sempre, insieme a set -u per rilevare variabili non definite.

#!/bin/bash
set -euo pipefail

BACKUP_DIR="/var/backups/db"
mkdir -p "$BACKUP_DIR"
mysqldump --all-databases > "$BACKUP_DIR/dump_$(date +%Y%m%d).sql"
echo "Backup completato con successo."

Questo script elementare è già pronto per un cron job. Non serve altro.

Quali comandi Linux servono davvero per automazione: grep, awk, sed, find, xargs

Uno script Bash senza comandi potenti è solo una lista di operazioni banali. Il vero salto lo fai con gli strumenti di elaborazione testo: grep per filtrare, sed per sostituire, awk per strutturare, find per cercare con criteri complessi, xargs per parallelizzare.

Come usare grep e sed per pulire file di log

Vediamo un caso concreto: un server web produce migliaia di righe di log al minuto. Vuoi estrarre solo gli errori 500, togliere i timestamp e salvare in un file compresso.

grep 'HTTP/1.1" 500' /var/log/nginx/access.log | sed 's/.*\] //' > /tmp/errors_500.txt

In una riga hai filtrato e formato. Noi abbiamo usato pattern simili per ridurre del 70% il tempo di analisi di un problema su un e-commerce con traffico alto.

Awk per estrarre dati strutturati da colonne

Se i dati sono in formato colonnare (es. /etc/passwd o log con campi separati), awk è imbattibile:

Sponsored Protocol

awk -F: '{ if ($3 >= 1000) print $1 " " $6 }' /etc/passwd

Questo stampa utenti reali (UID >=1000) con la loro home directory.

Come programmare cron job avanzati e quando preferire systemd timer

Servono backup notturni? Riavvio di servizi? Pulizia cache? Servono cron o systemd timer. Noi usiamo cron per task semplici e systemd timer quando serve controllo fine (dipendenze, logging, fallimento).

Esempio di cron job per backup database ogni giorno alle 2:30

30 2 * * * /usr/local/bin/backup_db.sh

Non dimenticare di reindirizzare stdout/stderr a un log: 30 2 * * * /script >> /var/log/backup.log 2>&1.

Systemd timer: quando cron non basta

Con systemd puoi definire unità timer che avviano un servizio. Vantaggi: logging integrato in journalctl, possibilità di eseguire solo se il sistema è attivo (after network.target) e gestione delle dipendenze.

Noi li usiamo per deploy automatizzati: il timer controlla un repository git ogni 5 minuti e se ci sono nuove commit, esegue pull + rebuild.

SSH avanzato: key management, tunneling e config file per automazione sicura

L'automazione senza SSH sicuro è come una serratura senza chiave. Ogni script che si connette a server remoti deve usare chiavi SSH con passphrase, meglio se protette da SSH agent. Noi consigliamo di creare una chiave dedicata per automazione senza password, ma limitata per IP e comandi con authorized_keys.

Config file SSH per saltare VPN e tunnel

Vogliamo connetterci a un server interno via bastion host? Scriviamo ~/.ssh/config:

Host interno
    HostName 10.0.0.5
    User deploy
    ProxyJump bastion.example.com

Poi ssh interno funziona in trasparenza. Utile anche per tunnel di database: ssh -L 3307:db.internal:3306 bastion.

Sponsored Protocol

Come automatizzare backup, deploy e monitoraggio con Bash su server Linux

Tre scenari reali in cui Bash ci ha salvato tempo e denaro.

Backup incrementale con rsync e cron

Noi usiamo rsync per backup su NAS remoto:

rsync -avz --delete --exclude='.cache' /home/user/ backup@nas:/backups/

Il flag --delete garantisce che file cancellati localmente vengano rimossi anche sul backup.

Deploy automatico da git

Abbiamo uno script che ogni minuto controlla eventuali commit su un branch di produzione e se ci sono novità esegue pull, composer install e riavvia il servizio. Lo abbiamo implementato per clienti con traffico alto che vogliono zero downtime.

Monitoraggio di risorse (CPU, RAM, disco) con alert via Telegram

Con poche righe in cron:

#!/bin/bash
LIMIT=80
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$LIMIT" ]; then
    curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d "chat_id=ID&text=Attenzione! Disco ${USAGE}% pieno."
fi

Qual è la differenza tra sed e awk e quando usare l'uno o l'altro?

Domanda classica. sed è un editor di flusso: perfetto per sostituzioni globali (s/vecchio/nuovo/g), cancellazioni, stampe condizionali. awk è un linguaggio per estrarre e manipolare dati colonnari con condizioni e cicli.

Regola pratica: se devi solo modificare testo (sostituire, eliminare righe), usa sed. Se devi elaborare testo (calcolare somme, filtrare per campi), usa awk. Noi li combiniamo spesso: awk pre-elabora, sed pulisce.

Sponsored Protocol

Gestione processi Linux: ps, kill, signal, nohup e background jobs per script robusti

Uno script che lancia processi in background deve saperli gestire. Con & e wait puoi parallelizzare. Con nohup eviti che il processo muoia alla disconnessione. Con kill -9 fermi anche i processi bloccati.

Noi usiamo trap per pulire risorse:

cleanup() {
    echo "Interruzione... uccido processi"
    kill $PID 2>/dev/null
}
trap cleanup EXIT INT TERM

Filesystem Linux: permessi, ownership, inode e link simbolici in automazione

Errori di permessi sono tra i più comuni in automazione. Ricorda: chmod 755 per eseguibili, chown deploy:deploy per ownership. I link simbolici sono utili per versioni di deploy: ln -sfn /var/www/releases/20260415 /var/www/current.

Scripting con Python come alternativa a Bash: quando e perché conviene

Bash è ottimo per orchestrazione di comandi, ma se serve logica complessa, parsing JSON/XML, espressioni regolari avanzate o librerie esterne, Python è superiore. Noi, di Meteora Web, abbiamo adottato Python per tutti i tool di automazione che devono interagire con API REST (es. backup su cloud, invio email, gestione certificati SSL).

Esempio: quando su un server si è rotto il rinnovo automatico dei certificati SSL, abbiamo scritto uno script Python che controlla la scadenza e chiama l'API di Let's Encrypt – in Bash sarebbe stato ingarbugliato.

import os, subprocess
from datetime import datetime, timedelta

domain = "esempio.com"
expiry = subprocess.getoutput(f"openssl s_client -connect {domain}:443 2>/dev/null | openssl x509 -noout -enddate")
if "30 days" in expiry:
    subprocess.run(["certbot", "renew"])

Ansible per automazione: configurare server senza SSH manuale

Se hai più server da gestire, Ansible è il salto successivo. Si connette via SSH (senza agent) e applica configurazioni dichiarative in YAML. Noi lo usiamo per:

Sponsored Protocol

  • Installare LAMP su nuovi server in 2 minuti
  • Aggiornare tutti i pacchetti di sicurezza su 20 macchine con un comando
  • Distribuire chiavi SSH e configurazioni firewall in modo consistente

Esempio di playbook per installare Nginx:

---
- name: Installa Nginx
  hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
    - name: Start and enable
      service:
        name: nginx
        state: started
        enabled: yes

Ansible non sostituisce Bash: lo usa. Per task semplici, Bash va bene. Per orchestrazione multi-server, Ansible è la scelta giusta.

In sintesi: cosa fare adesso per iniziare con l'automazione Linux

  1. Identifica un compito ripetitivo che fai almeno una volta a settimana (backup, aggiornamento, pulizia log).
  2. Scrivi uno script Bash con set -euo pipefail e testalo manualmente.
  3. Programmalo con cron o systemd timer. Aggiungi logging e alert su Telegram o email.
  4. Quando lo script cresce (più di 100 righe o interazione con API), valuta di riscriverlo in Python.
  5. Se hai più di 3 server, impara Ansible: guarda la documentazione ufficiale.

Noi, di Meteora Web, viviamo di automazione. Dal piccolo script per il backup clienti fino alla piattaforma proprietaria di gestione social multiente. Il tempo speso in automazione non è mai tempo perso: è investito in libertà.

Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere Informatico, co-fondatore di Meteora Web. Esperto in architetture software, sicurezza informatica e sviluppo sistemi scalabili.
[ Read Full Dossier ]

> METEORA_WEB // WEB AGENCY

Costruiamo la presenza digitale che la tua azienda merita.

Siti web, social, pubblicità online, e-commerce e hosting performante: ingegnerizzati con metodo da ingegneri informatici a Sciacca, per tutta Italia.

> MW_JOURNAL

> READ_ALL()