F FabGPT-FAQ

Cron e Bash

Pianificazione, debug dei job silenziosi e gli attrezzi Bash di ogni giorno. Ogni comando è verificato e copiabile; in chat basta descrivere cosa vuoi fare.

8 comandi in questa pagina

# Come vedo e modifico i cron job?

crontab -l           # elenca i tuoi
crontab -e           # modifica
crontab -l -u mario  # di un altro utente (da root)

I job di sistema stanno anche in /etc/cron.d/ e /etc/cron.{daily,weekly}: crontab -l non li mostra.

Approfondisci: Cron: la sintassi spiegata (finalmente)

# Come eseguo uno script a ogni avvio?

@reboot sleep 30 && /opt/script/avvio.sh

Lo sleep dà tempo alla rete di salire; per dipendenze serie (db pronto, mount presenti) meglio una unit systemd con After=.

Approfondisci: Cron: la sintassi spiegata (finalmente)Come si gestiscono i servizi Linux con systemctl?

# Come salvo l'output di un cron job in un log?

0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1

Senza redirect l'output svanisce (o prova a spedirsi via mail): un job senza log è un job di cui non sai nulla.

Approfondisci: Cron: la sintassi spiegata (finalmente)Dove sono i log su Linux (journalctl e /var/log)?

# Il cron job non parte (o fallisce in silenzio): come lo debuggo?

grep CRON /var/log/syslog | tail    # e' partito?
# nel dubbio, riproduci l'ambiente di cron:
env -i /bin/sh -c '/opt/backup.sh'

"A mano va, in cron no" = quasi sempre PATH o variabili: cron ha un ambiente minimo, usa percorsi assoluti.

Approfondisci: Cron: la sintassi spiegata (finalmente)Bash scripting: le basi che servono (e le trappole)

# Come inizio uno script Bash fatto bene (strict mode)?

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

Esce al primo errore, sulle variabili non definite e sui fallimenti in pipe: i bug urlano subito invece di corrompere in silenzio.

Approfondisci: Bash scripting: le basi che servono (e le trappole)

# Come debuggo uno script Bash riga per riga?

bash -x script.sh
# o solo un tratto: set -x ... set +x

-x stampa ogni comando ESPANSO (variabili incluse): il 90% dei bug si vede lì. Il resto lo trova shellcheck.

Approfondisci: Bash scripting: le basi che servono (e le trappole)

# Lo script dà errori strani con ^M: che succede?

dos2unix script.sh
# senza dos2unix: sed -i 's/\r$//' script.sh

Fine riga Windows (CRLF): il classico bad interpreter: /bin/bash^M dopo un copia-incolla o un editor Windows.

Approfondisci: Bash scripting: le basi che servono (e le trappole)

# Come imposto una variabile d'ambiente (temporanea o per sempre)?

export API_URL=https://api.esempio.com    # solo questa sessione
echo 'export API_URL=...' >> ~/.bashrc     # per il tuo utente
# di sistema: /etc/environment

Per i servizi systemd niente bashrc: si usa Environment= o EnvironmentFile= nella unit.

Approfondisci: Bash scripting: le basi che servono (e le trappole)Come si gestiscono i servizi Linux con systemctl?

Chiedi in chat