Cron

[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:

4 pensieri su “Cron

  1. 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?

  2. 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?

Lascia un commento