Bash pro začátečníky/Skripty
Tato stránka je součástí kurzu: | |
začátečníci | |
Příslušnost: všeobecná |
Skripty
editovatAž zde vytvoříte pár skriptů, můžete se pustit do kurzu Bash pro středně pokročilé. Aby bylo jasno tak do subnadpisu uvádíme pokud máme pocit, že jsme skript správně napsali a otestovali (vyřešeno) či či ještě pracujeme (dořešit).
Po stisku klávesy kalkulačka se objeví MATE Calculator, nebo se přenese do popředí, ten již zobrazený (dořešit)
editovatPříkaz vu spustí skript vicuna.sh (vyřešeno)
editovat- například v /diskD/Bash/skripty/ vytvoříme skript vu:
#!/bin/bash
#Initiate sh shell to run vicuna.sh
sh ~/diskD/Vicuna/Test1/vicuna/bin/vicuna
- skript vu umístíme do /usr/local/bin například přemístěním z jiné lokace, kde jsem ho editovali (
sudo cp ./diskD/Bash/skripty/vu /usr/local/bin
) - přesunem se do onoho adresáře přes
cd /usr/local/bin
a zjistíme jeho práva přesls -l vu
, případně udělíme práva spouštět všem skupinám přessudo chmod +x vu
- následně by příkaz terminálu
vu
měl spustit vicuna.sh
Každý týden vyskočí notifikační okno upozorňující, že je potřeba provést backup (dořešit)
editovat- Zde využívám nástroj cron a příkaz zenity. Postup je následující:
- Napřed si otevřu tabulku cronu a budu ji editovat pouze pro sebe jako přihlášeného uživatele:
crontab -e
(je otázka, jestli mi to bude vyhovovat a jestli nebude potřeba to předělat pro všechny uživatle) - Poté vložím následující kód:
- Napřed si otevřu tabulku cronu a budu ji editovat pouze pro sebe jako přihlášeného uživatele:
0 20 * * 7 zenity --info --text="Otevři Backups a zálohuj!" --no-wrap --width=600 --height=500
Znaky před zenity
určují, kdy se příkaz zenity
spustí. Funkce jednotlivých znaků cronu jsou následující:
- Minuty (možný rozsah 0 až 59), pokud chci tedy, aby se příkaz spustil přesně v 8 večer, musí zde být nula
- Hodiny (0 až 23), 20 je tedy 8 hodin večer
- Den v měsící (1 až 31) - jelikož nevím, který den v měsíci je neděle, dávám tedy hvězdičku, která určí, že se jedná o jakýkoliv den v měsíci
- Měsíc (1 až 12) - jelikož chci příkaz spouštět každý týden, musím sem dát hvězdičku
- Den v týdnu (1 až 7, neděle může mít hodnotu 7 i 0), pokud chci tedy příkaz spoustět každou neděli dám 7
A nyní příkaz zenity
:
- --info značí, že se jedná o informativní box
- --text je samotný text v boxu
- --no-wrap znamená, že se text nezalomí
- --width a --heigth urči velikost boxu
Testování:
- skrypt se nespustil a mám podezření, že důvodem je to, že byl nastaven v cronu pro aktuálního uživatele
- tak podle chatGPT 4 se cron spouští tím uživatelem, který je přihlášený
- pak mě napadlo, že možná skript nebyl spuštěn, protože byl zrovna počítač v režimu spánku
- a G 4 to potvrzuje a navrhuje mi místo toho zkusit anacron (který mám nainstalován) a který je určen pro zařízení, která nejsou zapnuta 24/7
- a v man anacron čtu, že se skript spustí v době na kterou byl naplánován, nebo hned jak vyjde ze zmražení
- nicméně anacron neumí spustit script k určitému datu, kdybych chtěl spouštět každé pondělí tak to nedokáže, protože počítá vždy určitý čas od spuštění. Pokud se tedy spuštění kvůli vypnutému počítači posune o dva dny, třetí spuštění pak bude zase posunuté o dva dny. Takže tato cesta také není vhodná.
Debugování dle chatGPT 4:
- Hypotéza
zenity
není v proměnné$PATH
, protože cron může využívat jinou proměnouPATH
- zjistíme, jaká je cesta k příkazu
zenity
:which zenity
- zjistíme jaké cesty jsou v
$PATH
cronu:crontab -e
a pak* * * * * echo $PATH > /tmp/cronpath.txt
, zobrazímemicro /tmp/cronpath.txt
a zjistíme, jestli je tam ta cesta - výsledek, je že
zenity
je v PATH cronu, můžeme odstranit* * * * * echo $PATH > /tmp/cronpath.txt
zcrontab
a případně odstranit tento souborrm /tmp/crontpath.txt
- zjistíme, jaká je cesta k příkazu
- ...