Linux -> Tehtävien ajastus ja levykiintiöt [Edellinen | Seuraava]

18. Tehtävien ajastus ja levykiintiöt

Tehtävien ajastus: cron

cronin avulla käyttäjä voi suorittaa ajastettuja tehtäviä silloinkin, kun ei ole kirjatunut järjestelmään. Tehtävien suorittamisesta huolehtii crond-palvelu, joka on useimmissa järjestelmissä päällä koko ajan.

Esimerkki 1

Kuvitellaan, että haluaisit ajaa komennon finger >> /home/sinuntunnus/finger.txt tunnin välein (koneen käyttäjälista tiedostoon finger.txt, niin että uusi tulostus tulee edellisen perään). Jokainen käyttäjä voi muokata henkilökohtaista ajatustiedostoaan (crontab-tiedosto) komentamalla

$ export EDITOR=nano
$ crontab -e
  • Crontab-ohjelma lukee ajatustiedoston editoinnissa käytettävän editorin ympäristömuuttujasta EDITOR. Ennen crontab-käskyä on siis syytä asettaa ao. ympäristömuuttujalle sopiva arvo eli sellaisen editorin käynistyskomento, jota osaa käyttää (esimerkissä nano). Oletuksena crontab käyttää vi-editoria.

Editorisi kirjoitustilassa kirjoita ajatustiedoston ensimmäiselle riville

0-59  *  *  *  *  finger >> /home/sinuntunnus/finger.txt
  • Tallenna tiedosto ja odottele seuraavia tasaminuutteja

crontab-tiedosto käyttää seuraavaa formaattia

1  2  3  4 5  komento

jossa ensimmäiset viisi kenttää määräävät komennon suoritusajankohdan ja viimeinen kenttä suoritettavan komennon. Ajankohta määrärään seuraavasti:

1 minuutti (0-59)
2 tunti (0-23)
3 kuukaudenpäivä (1-31)
4 kuukausi (1-12)
5 viikonpäivä (0-7) Arvot 0 ja 7 tarkoittavat sunnuntaita

Jos kentän kohdalla on *-merkki, ko. kentällä ei ole rajoittavaa vaikutusta. Esimerkissä 1  ao. komento suoritetaan kellonajan minuuttien vaihtuessa miksi tahansa tasaminuuteiksi (0-59). Jos et jaksa odotella seuraavaan tasaminuuttiin, niin voit katsoa koneen kellonjan:

$ date
Fri Aug 10 15:34:10 EEST 2001

Jos crontab-rivisi olisi muotoa

10  *  *  *  *  finger >> /home/sinuntunnus/finger.txt

komentosi ajettaisiin kerran tunnissa 10min yli tasatuntien (eli esim. klo 12:10, 13:10, 14:10, jne.).

Harjoitus 1

Testaa esimerkin 1 mukainen cronin toiminta.


Pääkäyttäjä voi editoida lisäksi systeeminlaajuista /etc/crontab-tiedostoa, esim:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
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

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

4 ensimmäistä riviä sisältävät avainsanan run-parts, joka tarkoittaa, että kaikki parametrina annetussa hakemistossa olevat ohjelmat/skriptit suoritetaan:

cron.hourly: Tunnin välein, minuutin yli tasatunnein
cron.daily: Päivittäin, 2 minuuttia yli 4 aamuyöllä
cron.weekly: Sunnuntaisin, 22 minuuttia yli 4 aamuyöllä
cron.monthly: Kk:n ensimmäinen päivä, 42 minuuttia yli 4 aamuyöllä

Viimeinen rivi on normaali komennon suoritus 5 minuutin välein (Komento suoritetaan, kun minuutit ovat välillä 0-59 askeleena 5)

Esimerkki 2

Web-palvelimen lokeista tehdään raportteja Analog-lokianalysaattorilla, jonka binääri on asennettu nimellä:
/etc/httpd/analog/analog Jos nämä raportit halutaan tehdä kerran vuorokaudessa, niin sijoitetaan /etc/cron.daily-hakemistoon vaikkapa skripti ana, jonka sisältö olisi kaikessa yksinkertaisuudessaan:

#!/bin/sh
/etc/httpd/analog/analog

Harjoitus 2

Asenna luvussa 8 esitelty Web Alert-skripti cronin ajettavaksi joka 10. minuutti, siten että ilmoitus tulee henkilkohtaiseen postilaattoosi.

Lisähuomiot:

  • crontab -l
    • Listaa henkilökohtaisen crontabin sisällön
  • crontab -r
    • Poistaa henkilökohtaisen crontabin sisällön
  • crontab -u ara /root/arin_uusi_crontab.txt
    • Lataa käyttäjän ara crontabin sisällöksi tiedoston arin_uusi_crontab.txt
  • Käyttäjä ei voi editoida crontabiansa mitenkään suoraan, vaan se tapahtuu "crontab -e" -komennon avulla!

Huomioita

  • Henkilökotaista crontab-tiedostoa ei voi editoida suoraan (jollakin tiedostonimellä), vaan se tapahtuu tavallisimmin komennolla "cronrab -e"
  • Lisätiedot:
    • http://www.google.com/search?q=crontab
    • man 5 crontab
    • man 1 crontab
    • man cron

Levykiintiöt: Quotan käyttönotto

Tämä ohje muistiinpanotyylillä.

Massamuistien käyttöä voi rajoittaa käyttäjä- tai käyttäjäryhmäkohtaisesti quota-nimisellä ja siihen liittyvillä muilla ohjelmilla. Tässä ohjeessa quota on mahdollistettu sekä käyttäjille että käyttäjäryhmille, mutta se on otettu käyttöön vain käyttäjille.

Dokumentit:
Seuraavassa on noudatettu enempi jälkimmäistä:

1) Editoi fstab-kuten mainittu, voi olla juuriosiokin, jos home siellä
(tarkistukset kestää kauemmin, kun turhaakin tarkistetaan) eli:

LABEL=/   /     ext3    defaults,usrquota,grpquota 1 2

2) AJA:

quotacheck -cugm /


(Ohjeessa oli: quotacheck -acug /home  EI TOIMINUT. Pitäisi olla mounttaamaton osio, jotta onnistuu ilman m-vipua)

3) Aja

quotacheck -avug

(pitäisi laittaa crontabiin)

4) Editoi käyttäjäkohatainen quota:

edquota -u testuser

Disk quotas for user testuser (uid 501):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/hda3                    440436     500000     550000     37418        0        0

5) Testaa/Katso tilanne:
   quota testuser
   repquota -a

6) Tarkistusvälin asetus

edquota -t

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/hda3                     7days                  7days

7) QUOTA PÄÄLLE!
(Ao. loitsu pitää pistää jonnekin aloitusfilettoon: esim rc.local)

quotaon -vaug

(pois päältä: quotaoff -vaug)

LISÄHUOMIOITA

a) Pienellä grace-periodin arvolla ja riittävän säännöllisellä "quotacheck -avug":lla cronista quota jopa toimii riittävän "interaktiivisesti"?

b) QUOTA samaksi usealle käyttäjälle:

http://www.tldp.org/HOWTO/Quota-4.html#ss4.3

eli:

b1) Tee bob-käyttäjän quota
b2) edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
    (vaatinee c-shellin eli chs:n tai tcsh:n?)

Jätetty tarkoituksella tyhjäksi