Bash pro začátečníky/Skripty
Vzhled
Tato stránka je součástí kurzu: | |
začátečníci | |
Příslušnost: všeobecná |
Skripty
[editovat]Až 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)
[editovat]Pří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
- ...