Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki `cron` ja ajastatud tööd, mis kuulub osasse Osa IV: Tekst, otsing ja automatiseerimine.

cron ja ajastatud tööd

Loogika

Ajastatud töö tähendab, et käsk jookseb kindlal ajal ilma selleta, et peaksid ise terminalis kohal olema.

See on kasulik näiteks siis, kui tahad:

  • teha regulaarset varukoopiat
  • kirjutada logisse mõõtmist
  • käivitada puhastus- või sünkroonkäigu

Alguses piisab täiesti sellest, kui mõistad kolme asja:

  1. kus ajastus kirjas on
  2. et kasutada tuleb sageli täisradasid
  3. et väljund tasub logifaili suunata

Kiirülevaade

Eesmärk on panna lihtne töö kindlal ajal käima ja jätta maha logi, millest saab hiljem aru, mis juhtus.

Käsk või mõisteMilleksMida tavaliselt näed
crontab -lnäita olemasolevaid ajastusiridade loend või teade, et ajastusi pole
crontab -emuuda ajastusiavaneb redaktor
croni ajamusterkäivita käsk kindlal ajalterminalis ei ilmu tavaliselt midagi
suunamine logifailisalvesta tulemus ja veadlogifailist näed hiljem väljundit

Cron jookseb teistsuguses keskkonnas kui sinu interaktiivne shell, seega kasuta vajadusel täisteid ja logimist.

Tüüpilised algaja vead

  • kasutatakse suhtelisi teid, mis cronis ei tööta ootuspäraselt
  • unustatakse, et cronil võib olla teistsugune PATH
  • eeldatakse, et vea korral ilmub midagi automaatselt ekraanile

Kiirspikker

  • crontab -l näitab sinu croni ridu
  • crontab -e avab cron-tabeli muutmiseks
  • viis ajavälja tähendavad minut, tund, kuupäev, kuu ja nädalapäev
  • */15 * * * * käsk tähendab “iga 15 minuti järel”

Käivita need käsud

Kõige ohutum esimene samm on lihtsalt vaadata olemasolevat croni:


crontab -l

Näidisrea võid kõigepealt kirjutada faili:


cat > naide.cron <<'EOF'
*/15 * * * * /bin/date >> "$HOME"/cron-naide.log 2>&1
EOF
cat naide.cron

Kui tahad selle päriselt paigaldada, siis järgmine samm oleks:


crontab naide.cron
crontab -l

Cronirea kuju

Lihtne cronirida näeb välja nii:


*/15 * * * * /bin/date >> "$HOME"/cron-naide.log 2>&1

Väljad vasakult paremale:

  1. minut
  2. tund
  3. kuupäev
  4. kuu
  5. nädalapäev
  6. käsk

Näite tähendus on:

  • iga 15 minuti järel
  • käivita /bin/date
  • lisa väljund faili cron-naide.log

Miks täisrajad tähtsad on

Croni keskkond on tavaliselt palju väiksem kui sinu tavaline interaktiivne shell.

See tähendab, et käsk, mis töötab terminalis nii:


date

tasub cronis kirjutada pigem nii:


/bin/date

Sama kehtib sageli ka skriptide, Pythoni ja teiste tööriistade kohta.

Väljundi suunamine

Kui cron töötab taustal, siis on väga kasulik suunata väljund faili:


>> "$HOME"/cron-naide.log 2>&1

See tähendab:

  • lisa tavaline väljund faili lõppu
  • lisa samasse faili ka veaväljund

Kui töö ei käi ootuspäraselt, on see logifail esimene koht, kust vaadata.

Testi käsku enne käsitsi

Väga hea reegel on:

enne kui paned käsu croni, käivita ta käsitsi täpselt samas kujus.

Näiteks:


/bin/date >> "$HOME"/cron-naide.log 2>&1
tail -n 5 "$HOME"/cron-naide.log

Kui see ei tööta käsitsi, ei tööta see tõenäoliselt ka cronis.

Linux ja macOS

Croni põhimõte on sarnane, aga tänapäeva süsteemides on olemas ka teised ajastusmehhanismid:

  • Linuxis kohtad sageli ka systemd timereid
  • macOS-is on loomulikum süsteem launchd

Sellegipoolest on cron väga hea esimene mudel, mille pealt ajastatud töid mõista.

Minitest

  1. Vaata, kas sinu kasutajal on juba mõni cronirida olemas.
  2. Kirjuta üks näidisrea fail, mis käivitaks käsu iga 15 minuti järel.
  3. Käivita sama käsk enne käsitsi.
  4. Seleta ühe lausega, miks täisrada on cronis tähtis.

Peatüki täisspikker

Töövood

Eesmärk

ajastatud töö tähendab, et käsk jookseb kindlal ajal ilma sinu avatud terminalita; tähtsad on ajaväljad, täisrajad ja logifail

Põhikujud

  • crontab -lvaata olemasolevat
  • crontab naide.cronpaigalda fail
  • /bin/date >> "$HOME"/cron-naide.log 2>&1testi käsitsi
  • tail -n 5 "$HOME"/cron-naide.logvaata logi

Olulisemad lipud, märgid ja kiirnupud

  • */15 * * * *iga 15 min
  • >>lisa logisse
  • 2>&1vead samasse
  • $HOMEkasutaja kodu
  • /bin/datetäisrada