SCHEDULAZIONE DI PROCESSI

Precedente
Programma
Seguente
Bastard Operator From Hell!
crontab -e
  Edita il proprio file crontab (con l'editor predefinito)
crontab -l
  Visualizza il proprio file crontab
crontab -r
  Rimuove il proprio file crontab
cat /var/spool/cron/*
  Visualizza tutti i file crontab degli utenti (si deve essere root)
Linux et cetera...
Linux *nix Win-DOS
cron cron Operazioni pianificate
at at at
Tips & Tricks

Se voglio lanciare lo script /root/controlla_post.sh ogni mezz'ora in orari lavorativi (dalle 8 alle 18.30), sabato e domenica esclusi, dovrò inserire in /etc/crontab una riga simile:
01,31 8,9,10,11,12,13,14,15,16,17,18 * * 1,2,3,4,5 root /root/controlla_posta.sh

Una versione più compatta della stessa riga è:
01,31 8-18/1 * * 1-5/1 root /root/controlla_posta.sh

Le modifiche fatte al file /etc/crontab non richiedono il riavvio del daemon crond.

Su Linux si trova comunemente anacron, che ha funzionalità simili a cron ma alcune features aggiuntive, utili per macchine che non sempre sono accese, tali per cui è in grado di eseguire task schedulati nel passato e non eseguiti appena la macchina è in grado di farlo (è accesa).
Anacron è complementare a crond in quanto non ha la stessa precisione nella gestione dello scheduling, per cui non ha molto senso utilizzarlo su server accesi 24 ore su 24.

definizioni
In quasi tutti i sistemi operativi è possibile schedulare o meglio programmare ad un certo orario l'avvio di un comando o programma senza essere collegati in qualche modo al sistema.
Gli strumenti disponibili su Unix e Linux sono:
at Permette di eseguire un comando una volta sola, eventualmente quando il sistema non è occupato o in un momento definibile dall'utente. Non verrà trattato in questa sede.
cron E' un daemon che viene utilizzato dal sistema per eseguire compiti configurabili dall'utente ad intervalli regolari.

Cron e crontab

Il demone crond viene eseguito all'avvio del sistema ( /etc/rc.d/init.d/crond ) e, ogni minuto, analizza il suo file di configurazione predefinito /etc/crontab per verificare se deve eseguire dei comandi.
Su varie distribuzioni /etc/crontab prevede le seguenti voci:
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Che in pratica fanno eseguire:
- tutte le ore (al minuto 01) i comandi presenti nella directory /etc/cron.hourly,
- tutti i giorni alle 4.02 i comandi in /etc/cron.daily,
- tutte le settimane, alle 4.22 di domenica i comandi in /etc/cron.weekly,
- tutti i mesi, alle 4.42 del primo del mese, tutti i comandi in /etc/cron.monthly
Ogni riga di /etc/crontab prevede quindi sette campi.
I primi 5 campi servono per definire quando eseguire il comando specificato nel settimo campo. Possono contenere valori separati da virgola o un asterisco che indica tutti i calori possibili:
1) Minuto in cui eseguire il comando. Valori da 00 a 59.
2) Ora in cui eseguire il comando. Valori da 0 a 23 (0 è mezzanotte, 12 mezzogiorno)
3) Giorno del mese in cui eseguire il comando. Valori da 1 a 31.
4) Mese dell'anno in cui eseguire il comando. Valori da 1 a 12.
5) Giorno della settimana in cui eseguire il comando. Valori da 0 a 6. (0 corrisponde alla Domenica, 1 al Lunedì.. )
6) Utente con cui viene eseguito il comando. Crond viene eseguito come root e può impersonificare qualsiasi utente. Questo campo può anche essere omesso (root di default).
7) Riga di comando da eseguire (con eventuali opzioni, argomenti ecc.)
Il comando run-parts, nel caso di cui sopra, esegue tutti i comandi presenti nella directory indicata.

Oltre a /etc/crontab, riservato al sistema, ogni utente può editare un proprio crontab file con la stessa struttura di /etc/crontab.
In BOFH! i dettagli.

 
WEB RESOURCES
http://weather.ou.edu/~billston/crontab/ A crontab tutorial
http://sourceforge.net/projects/anacron/ Anacron HomePage