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:

Annunci

Determinare la dimensione delle directory in linux

du è il comando per determinare la dimensione di una directory in Linux

la forma base di du command è

du /dir/da/calcolare

le sue opzioni più interessanti

du -hc ## con somma totale è fomato (KB,MB.GB )

Per avere la dimensione del primo livello di sottodirectories

du -sm  ./* | sort -nr

se è supportata l’opzione -d

du -h  -d 1

-m ## dimensione in MB

Per la dimensione delle directories del filesystem ordinate e in MB

sudo du -sm  /[^p]* | sort -nr

Se si desiderano exludere i file system esterni ( -x) e limitare alle prime 15 dir.

sudo du -sxm  /[^p]* | sort -nr   | head -n 15

per determinare le dimensioni dellahome inluce le directory nascoste.

du -sm * .[^.]* | sort -nr   | head -n 15

.[^.]* dir nascoste

se è supportato -d

sudo du  -m -d 1  /  |  sort -nr

du opzioni

du --help
Usage: du [OPTION]... [FILE]...
  or:  du [OPTION]... --files0-from=F
Summarise disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
  -0, --null            end each output line with NUL, not newline
  -a, --all             write counts for all files, not just directories
      --apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in ('sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  scale sizes by SIZE before printing them; e.g.,
                           '-BM' prints sizes in units of 1,048,576 bytes;
                           see SIZE format below
  -b, --bytes           equivalent to '--apparent-size --block-size=1'
  -c, --total           produce a grand total
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
  -d, --max-depth=N     print the total for a directory (or file, with --all)
                          only if it is N or fewer levels below the command
                          line argument;  --max-depth=0 is the same as
                          --summarize
      --files0-from=F   summarise disk usage of the
                          NUL-terminated file names specified in file F;
                          if F is -, then read names from standard input
  -H                    equivalent to --dereference-args (-D)
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
      --inodes          list inode usage information instead of block usage
  -k                    like --block-size=1K
  -L, --dereference     dereference all symbolic links
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -S, --separate-dirs   for directories do not include size of subdirectories
      --si              like -h, but use powers of 1000 not 1024
  -s, --summarize       display only a total for each argument
  -t, --threshold=SIZE  exclude entries smaller than SIZE if positive,
                          or entries greater than SIZE if negative
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using STYLE, which can be:
                            full-iso, long-iso, iso, or +FORMAT;
                            FORMAT is interpreted like in 'date'
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -x, --one-file-system    skip directories on different file systems
      --help     display this help and exit
      --version  output version information and exit