Home > Linux > Cron

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

Annunci
Categorie:Linux Tag:,
  1. Giuseppe
    novembre 9, 2012 alle 11:17 pm

    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. Giuseppe
    novembre 9, 2012 alle 11:30 pm

    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?

    • novembre 10, 2012 alle 9:19 am

      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.

  3. Giuseppe
    novembre 13, 2012 alle 5:13 am

    Grazie mille Maurizio! 🙂 Adesso ho un server che va una bomba!!! 🙂

  1. No trackbacks yet.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: