blog.johanka.net

Jednoduchá automatizace (cron)

Cron je proces, který běží na pozadí a umožňuje uživatelům spouštět v pravidelných intervalech programy jako administrátor (root) nebo v určitých hodinách a dnech jako běžný uživatel podle jím stanoveného rozvrhu.

Pokud jste si při prohlídce adresáře /etc kladli otázku, k čemu asi tak slouží složky s názvy cron.hourly, .daily, monthly atd., tak právě do nich můžete zkopírovat své skripty a nechat je spouštět v pravidelných intervalech (jednou za hodinu, den, týden atd.) jako root. Rozumí se pod podmínkou, že počítač bude stále zapnutý.

Budete-li chtít své skripty spouštět jen v určitých dnech nebo v přesně stanovených časech jako běžný uživatel, budete nejdříve muset vytvořit soubor crontab. Nemusíte se však kvůli tomu učit zacházet s textovými editory bez grafického rozhraní, bohatě si vystačíte s příkazem echo:

echo "0 10 * * 1-5 $HOME/agenda.sh" | crontab

První číselný údaj představuje minuty, následují hodiny, dny v měsíci, měsíce a konečně dny v týdnu. Hvězdička * znamená každý. Symbol | jsem mohla klidně nahradit znakem > (přidáním nového řádku se předchozí obsah smaže). Pokud zadáváte více úkonů, stačí celé zadání vytvořit jako nový soubor ve vámi oblíbeném textovém editoru, a celé je pak předat do souboru crontab pomocí příkazu cat.

Výše uvedený příklad nastaví na mém počítači spouštění skriptu s týdenním seznamem úkolů na 10 hodin dopoledne od pondělí do pátku.

Obsah souboru crontab si jednoduše necháte vypsat příkazem

crontab -l

Smazat jej můžete např. tak, že do něj vložíte obsah vámi vytvořeného prázdného textového souboru.

Chcete-li si otestovat pravidelné spouštění programů jako root, zkopírujte své skripty do některé ze složek cron.hourly, .daily atd. v adresáři /etc. Jejich vlastníkem se automaticky stane root. Nezapomeňte předtím nastavit jejich přístupová práva (chmod) na 700.

Následuje ukázka skriptu, jehož prostřednictvím si můžete zautomatizovat pravidelné zálohování svého důležitého projektu:

#!/bin/bash

if [ -d /umístění/USB ] ; then

cd /umístění/USB/
tar -czf reg_backup_$(date +%y%m%d).tar.gz /umístění/vašeho/projektu

else
cd /tmp
tar -czf reg_backup_$(date +%y%m%d).tar.gz /umístění/vašeho/projektu

echo "Ahoj, zapomněl/a jsi připojit externí disk, zálohované soubory proto najdeš v adresáři tmp. S pozdravem $HOSTNAME" > /umístění/Dokumentů/backup-report_$(date +%y%m%d).txt

fi

$HOSTNAME je jméno vašeho počítače. Pokud budete tento skript spouštět jako root, je třeba v něm uvádět úplné adresy (umístění) všech souborů, proměnná $HOME nebude tudíž fungovat. Umístění složek můžete přednastavit jako vlastní proměnné na začátku skriptu:

#!/bin/bash
PROJECTDIR="/vaše/soubory"
BACKUPDIR="/umístění/USB"

Skript pak bude pokračovat takto:

if [ -d $BACKUPDIR ] ; then

cd $BACKUPDIR
tar -czf reg_backup_$(date +%y%m%d).tar.gz $PROJECTDIR

(...)

Jak sami zjistíte, všechny soubory vytvořené administrátorem (root) patří jemu, vyplatí se proto přidat někam na konec skriptu řádek, který automaticky změní jejich vlastníka na vás:

chown uživatel:skupina soubor

Jména uživatele a skupiny jsou obvykle identické.

Tak. Líbilo se?

Příště: jak si na osobním počítači nastavit zjednodušený webový server (LAMP). Plus pár tipů, které jinde nenajdete. :-)

copy left Johanka Piskovská, 2020