[aggiornamento 2012 novembre]
Visualizzare le attività pianificate
crontab -l
Editare la tabella crontab si utilizza il comando
crontab -e
Editare la tabella crontab di un altro user è necessario aggiungere l’user
crontab -e -u backup
E preferibile, piuttosto che editatre la tabella crontab direttamente, caricare le attività da un file esterno con il un comando del tipo
crontab /home/user/mycron.txt
rimuovere tutte le attività
crontab -r
le attività crontab possono essere loclaizzate in un file come in un database qualora si tratti di un file una destinazione di riferiemento è /var/spool/cron
Disabilitare un’attività pinificata
per disabilitare un’attività pianificata in crotab, per alcuni giorni, è possibile commentare ( #) la riga con il task
oppure è possibile salvare le attività pinaificate in un file cancellarle e poi ripristinarlee
crontab -l > $HOME/crontab_file crontab -r crontab $HOME/crontab_file
Crontab file
A crontab file ha 5 campi che specificano giorno , data e orario che sono seguiti dal commando che deve essere eseguito al dato intervallo. Come si può dedurre dallo schema sotto l’unità di tempo minima che può essere specificata per cron è il minuto.
es:
00 2 * * 0 sa.sh
*/15 * * * * check-disk-space
* * * * * commando da eseguire _ _ _ _ _ | | | | | | | | | +-----< giorno-settimana (0 - 6) (domenica=0) | | | +------< mese (1 - 12) | | +-------< giorno-mese (1 - 31) | +--------< ore (0 - 23) | es. */5 ogni ore +--------------< minuti (0 - 59) | es. */15 ogni 15 minuti |
Generatore crontab online
E’ possibile utilizzare anche editor online per calcolare in modo semplice e rapido le espressioni per lo schedulatore cron. crontab.guru é senz’altro un editor online simpatico e funzionale.
Esempi
5 2 * * 0-6 /usr/local/bin dumpsdb.sh /var/log/dumpdbs.log 2>&1
salvare databases ogni giorno alle 2:05 tenendo traccia nel log file dumpsdb.log
riavviare il servizio postgresql
0 3 * * 0 service mysqld restart /var/log/mysqld.log 2>&1
riavviare il servizio mysqld la domenica alle ore 3:00
*/15 8-18 * * 1-5 /usr/local/bin reportsa.sh /var/log/reportsa.log 2>&1
generare un rapporto ogni 15 minuti giorni feriali
0 19-7 * * 1-5 /usr/local/bin reportsa.sh /var/log/reportsa.log 2>&1
generare un rapporto ogni ora.
0 */2 * * 0,6 /usr/local/bin reportsa.sh /var/log/reportsa.log 2>&1
generare un rapporto ogni 2 ore nei giorni festivi la domenica corrisponde ai valori 0 oppure 7.
ATTENZIONE il campo 3 (giorno ) e il campo 5 ( giorno della settimana ) vengono valutati con un operazione di tipo OR.
i caratteri % nel comando da eseguire devono essere scritti con l’escape +%Y%m%d diventa +\%Y\%m\%d
Specificare la variabile PATH in crontab
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/maurizio
Eseguire un comando linux dopo ogni reboot
in questo caso utilizzare @reboot
@reboot comando
Verificare il funzionamento di cron
per accertarsi che cron stia funzionando correttamente facciamogli generare un file ogni minuto nella home.
inseriamo il task di generazione del file con touch in un file esterno “mycron.txt” utilizzanod echo
echo "* * * * * touch $HOME/cron-funziona" > mycron.txt
importiamo il task con
crontab mycron.txt
controlliamo l’avvenuta importazione con con crontab -l
maurizio@Lub12120-Tmp:~$ crontab -l * * * * * touch /home/maurizio/cron-funziona
dopo uno due minuti nella home dovrebbe comparire il file cron-funziona
verifichiamo con ls -l
maurizio@Lub12120-tmp:~$ ls -l c*
-rw-rw-r-- 1 maurizio maurizio 75559 Oct 20 00:24 channels-vlc.xspf
-rw-rw-r-- 1 maurizio maurizio 0 Nov 10 09:02 cron-funziona
In caso di utilizzo di un task che lancia uno script o un comando con output per verificarne il funzionamento è possibile riportare l’esito in un file specifico usando qualcosa tipo.
* * * * * /home/maurizio/myscript.sh >> /home/maurizio/myscript.log 2>&1
altro esempio possiamo salvare una riga che riporta l’aggiornamento del file cron-funziona con
* * * * * ls -l /home/maurizio/cron-funziona >> /home/maurizio/mycron.log 2>&1
Reference:
- cron – Wikipedia, the free encyclopedia
- Crontab – Quick Reference | Admin’s Choice
- Come controllare che un servizio (service) sia in esecuzione in linux
- Come controllare da quanto tempo un servizio è in esecuzione in linux
Ci credi che non ho capito? 🙂
Come potrei schedulare lo script “free-ram.sh” (che ho inserito grazie alla tua guida) in modo tale che venga eseguito in automatico una volta al giorno?
Ci credi che non ho capito? 🙂
Come potrei schedulare lo script “free-ram.sh” (che ho inserito grazie alla tua guida) in modo tale che venga eseguito in automatico una volta al giorno?
Ho scritto in questo modo all’interno di crontab, andando a capo ed inserendolo alla fine di tutti gli altri presenti:
* */23 * * * /usr/bin/free-ram.sh
Questo dovrebbe far si che il commando venga avviato ogni 23 ore, sbaglio? Ho fatto bene?
In linea teorica è corretto quanto hai fatto.
Comunque ho aggiunto la sezione “verificare il funzionamento di cron” ( in basso nel post ) che credo ti possa essere utile.
Grazie mille Maurizio! 🙂 Adesso ho un server che va una bomba!!! 🙂