Bash pro začátečníky/Skripty

Jak používat klasifikační nálepkuTato 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řes ls -l vu, případně udělíme práva spouštět všem skupinám přes sudo 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í:
    1. 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)
    2. Poté vložím následující kód:
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í:

  1. 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
  2. Hodiny (0 až 23), 20 je tedy 8 hodin večer
  3. 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
  4. 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
  5. 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ěnou PATH
    • 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íme micro /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 z crontab a případně odstranit tento soubor rm /tmp/crontpath.txt
  • ...