Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Internet a sítě => Téma založeno: panRajce 16 Června 2020, 13:42:26

Název: 20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 16 Června 2020, 13:42:26
Ahoj,
prosím poraďte. Mám nastavený v Aplikace po spuštění jeden SH skript. Ale jeho spuštěním dochází k ověření síťové licence.
Bohužel proti 18.04 se mi u 20.04 síť připojuje poměrně dlouho (PS, zkusil jsem i kdysi poraděný fígl pro 18.04 s ohlášením a opětovným přihlášením). Tím pádem u funkce nedojde k potřebnému ověření a zůstane "viset". Když já zavřu a spustím následně manuálně, když už je připojená síť, tak vše proběhne v pořádku.

Našel jsem sice možné řešení - https://linuxconfig.org/how-to-run-script-on-startup-on-ubuntu-20-04-focal-fossa-server-desktop (https://linuxconfig.org/how-to-run-script-on-startup-on-ubuntu-20-04-focal-fossa-server-desktop), ale jakožto neLINUXák tápu v tom, vytvořil jsem si soubor /etc/systemd/system/run_octane_daemon.services , ale po startu zdá se se skript stejně nespustí
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: macu 16 Června 2020, 14:21:17
a co dát do toho skriptu na začátek

Kód: [Vybrat]
sleep 10
kde 10 značí 10 sekund, o které má být "zpoždění" dalších příkazů vykonáno...Samozřejmě počet sekund si musíš stanovit sám, to za tebe nikdo neudělá, záleží, jak dlouho ti vše startuje..ale to se dá vysledovat
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 16 Června 2020, 15:24:27
To mám .... bohužel, nevím proč, ale přijde mi, že když dám čekací dobu, tak to čeká CELÉ .... zkoušel jsem i 30s a skript čekal, potom došlo ke spuštění daemona .... a teprve pak k připojení sítě. Takže výsledek stejný, jenom o 30s delší doba naběhnutí do funkčního stavu připravenosti  :-\
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 16 Června 2020, 16:23:37
Leppšie popíš čo sa vlastne tým skriptom snažíš urobiť, alebo obísť.
=> Ale jeho spuštěním dochází k ověření síťové licence...
To "Ale" na začiatku sa má chápať akože sa snažíš obísť overenie licencie?
Ak nechceš zverejniť ten skript aby sa mohol na to niekto pozrieť, tak si doňho dopíš logovacie riadky a z logu potom lahšie zistíš kde to viazne.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 16 Června 2020, 21:31:04
Není to nic tajného
na začátku při startu spouštím script run_octane_daemon.sh
Kód: [Vybrat]
#/bin/sh
sleep 10
"/home/uzivatel/Install/Octane/OctaneRender_4_04_linux/octane_slave_daemon" --port 48000 --slave "/home/uzivatel/Install/Octane/OctaneRender_4_04_linux/octane_slave" --alias "Ubuntu" --out-of-core "2g"

který jak vidět spouští s určitými parametry program octane_slave_daemon

Při jeho spuštění dochází po internetu k ověření zakoupené licence .... nesnažím se to nijak obejít ... ale když mě v Ubuntu 20.04 naběhne síťové připojení později jak ten skript, tak octane_slave_daemon nemá spojení se servrem a zůstane viset na "přihlášení uživatele", tím pádem daemon neběží a ostatní počítače v síti nemohou využívat Ubuntu PC pro síťový výpočet CUDA.
Jelikož Ubuntu PC je výpočetní stanice ve vedlejší místnosti (nazvěme to servrovnou), chci aby běžela plně automaticky a né aby se muselo při jejím zapnutí (WakeOnLAN) běhat zadávat přihlašovací údaje.

Do nedávna (cca 2týdny) ke zpoždění připojení k síti nedocházelo a tak síť byla dostupná dříve než se spouštěl skript. Jenže poslední dobou je tam z mě neznámého důvodu nějaká prodleva.

Dokonce jsem již deaktivoval mount síťového disku přes fstab (což jsem mimo jiné řešil v jiném vlákně) a mountnu si ho v případě potřeby ručně. BTW ... tam https://forum.ubuntu.cz/index.php/topic,84564.msg571578.html#msg571578 (https://forum.ubuntu.cz/index.php/topic,84564.msg571578.html#msg571578) jsem řešil, že mě fstab nemoutne složku automaticky, ale posléze na ruční poky
Kód: [Vybrat]
sudo mount -a k připojení došlo. Což mne přivádí na myšlenku, že pokud se pokusí o mount dříve než je dostupná síť, pak evidentně také není schopen připojení.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: juwa2 16 Června 2020, 21:58:13
Ten sleep  přece musí fungovat - ledaže by ten daemon už běžel (byl spuštěn něčím jiným). Prověř to..
Nebo zkus ten skript spouštět jiným skriptem kde to zpoždění nastavíš
Kód: [Vybrat]
#!/bin/bash
sleep 20
/cesta/k/run_octane_daemon.sh

Jo, a v tom tvém skriptu ti chybí za křížkem vykřičník.....
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 16 Června 2020, 22:24:50
Je možné, že skript sa ti spustí ok, ale problém je v tom daemone. Zrejme ten daemon je potrebné upraviť. Riešil som niečo podobného. Mám k tomu napísaný skript, ktorý pozdrží vykonanie príkazu na dobu kedy nabehnú sieťové služby. Neviem či by ti pomohlo keď ti to nevyriešil sleep, pretože to mám robené práve cez sleep s periodickým testom nábehu siete.
Môžem ho sem postnúť ak by si to chcel odskúšať.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 16 Června 2020, 22:42:05
Neviem či si to pamätám dobre, alebo či sa niečo nezmenilo, ale spomínam si, že som niekedy v minulosti skúmal ako funguje sleep a došiel som k záveru, že nebeží v multitaskingu, prípadne ak áno, tak v nejakom kooperačnom, tak ako to bolo na Win95.
Dá sa to vyriešiť takto: (príklad)
{ sleep 10; systemctl restart avahi-daemon.service; } &

Za 10 sekúnd to reštartuje Avahi daemon, pričom všetko, čo je za týmto príkazom sa vykonáva ďalej.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 17 Června 2020, 08:52:02
Jo, a v tom tvém skriptu ti chybí za křížkem vykřičník.....

No popravdě, jako naprostý linux-lama a skript-beginer ... jsem to od někud kopíroval, tak jim tam asi taky ten vykřičník chybí ... ale zkusím to upravit podle tebe
BTW ... prošel jsem si skripty mnou utvořené (kopírované) a vykřičník mě chybí skoro ve všech  :o

Dá sa to vyriešiť takto: (príklad)
{ sleep 10; systemctl restart avahi-daemon.service; } &
Za 10 sekúnd to reštartuje Avahi daemon, pričom všetko, čo je za týmto príkazom sa vykonáva ďalej.

OK, také zkusím, rozhodně nějaké ověření při sleep, jestli už je připojená síť, mě zní velmi logicky.

PS: nevím jak moc to ovlivní, ale zapomněl jsem uvést, že tento jev se vyskytuje především při úplném vypnutí PC, a to především, když mám přes Crontab v určitou dobu spuštěný skript na sledování GPU.Utilization (resp. zatížená GPU procesorů) a pokud je po určitou dobu nízké, tak se PC vypne přes sudo poweroff. Když PC "jen" restartuji, tak tento problém nenastává.

EDIT: tak avahi-daemon.service vyžaduje heslo ... takže to bych byl skoro tam kde jsem byl  :-\
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: juwa2 17 Června 2020, 09:38:05
Přidej ho do výjimek v sudoers.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 17 Června 2020, 12:33:18
Vykonanie akcie po nábehu siete riešim takto...
Toto sú funkcie, ktoré mám v knižnici funkcií a volám ich zo skriptov zhruba takto:

1. najprv nadefinujeme IP adresu servera aby sme mohli zisťovať funkčnosť siete
HOST="192.168.1.1"

2. a zavoláme funkciu pre zistenie či je server pripravený a teda či beží sieť
if [ `is_server_online $HOST` ]; then
   # tu starujeme skript, ktorym potrebujeme nieco vykonat
   start_my_action
else
   echo "server, alebo siet nieje pripravena"
fi

Kód: [Vybrat]
function ping_probe() {
    # Test for ping active on server
    # Status:
    #   server is online = 0
    #   timeout or error = 1
    local server=$1
    local Status=1

    if [ "$server" != "" ]; then
        Status=0
        ping $server -q -c 1 -W 1 1>/dev/null 2>/dev/null || Status=1
    fi

    echo $Status
}

function is_network_online() {
    # Wait if is network online and exit with status
    # Status:
    #   Successful        = 0
    #   timeout or error  = 1

    local HOST=$1
    local COUNTER=0
    local MAX_VAL_TIMEOUT=120
    local IS_ONLINE=0

    if [ "$HOST" = "" ]; then
        return 1
    fi

    IS_ONLINE=`ping_probe $HOST`
    if [ "$IS_ONLINE" != "0" ]; then

        while [ "$IS_ONLINE" = "1" ] && [ "$COUNTER" -le $MAX_VAL_TIMEOUT ]
         do
             IS_ONLINE=`ping_probe $HOST`
             let COUNTER++;
         done
        if [ "$COUNTER" = "0" ] || [ "$IS_ONLINE" = "0" ]; then
            # Network is ready
            return 0
        else
            # Timeout - network is not ready
            return 1
        fi
    else
        return 0
    fi
}
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: jmp 17 Června 2020, 12:48:50
asi to budete mít o dost jednodušší pokud místo pingu ve skriptu použijete fping
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 17 Června 2020, 13:42:51
Vykonanie akcie po nábehu siete riešim takto...
WOW  8)
Jdu zkusit implementovat

asi to budete mít o dost jednodušší pokud místo pingu ve skriptu použijete fping

ale až po doinstalování sudo apt install fping  8) a hádám i náležité úpravě skriptu
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 17 Června 2020, 16:11:05
 @WEST
tak jsme se tedy inspiroval a ..... našel jsem trochu jiné řešení pod https://unix.stackexchange.com/questions/184266/bash-ping-script-file-for-checking-host-availability (https://unix.stackexchange.com/questions/184266/bash-ping-script-file-for-checking-host-availability)

a tady je výsledek, který zdá se bude doufám funkční ....

Kód: [Vybrat]
#!/bin/sh
while true;
do
  ping -q -c1 8.8.8.8
  if [ $? -eq 0 ]
  then
    /home/vizualizace/Install/Octane/OctaneRender_4_04_linux/octane_slave_daemon --port 48000 --slave /home/vizualizace/Install/Octane/OctaneRender_4_04_linux/octane_slave --alias "Ubuntu 20.04" --out-of-core "8g"
    exit 0
  fi
done

IP 8.8.8.8 jsme nakonec volil úmyslně, než IP routeru, tak google.com .... aby bylo jisté, že lze pinknout i ven a nejen uvnitř sítě .. což je pro výše zmíněné ověření licence důležité.

PS: při ostrém startu je i vidět, že skript je spuštěn již nějakou chvíli a teprve pak dojde k připojení do sítě

DĚKUJI ZA ŘEŠENÍ
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 17 Června 2020, 21:06:32
Nemáš zač. Pre istotu si ten skript otestuj zadaním neexistujúcej adresy.
Zdá sa mi, že tá slučka do/while je typu "opakuj donekonečna a zamrzni" ak server nikdy neodpovie.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 17 Června 2020, 21:39:58
zkusil jsem to jinak, odpojil jsem síťové připojení a pak připojil
jen ještě přijít na to,jak zařídit aby tam nebylo 250 řádku "server nepřipojen"
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 17 Června 2020, 21:54:53
To je práve to, čo mám v tej funkcii vyriešné. Nútené ukončenie po 120 sekundách ak server neodpovedá.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: juwa2 17 Června 2020, 22:32:39
zkusil jsem to jinak, odpojil jsem síťové připojení a pak připojil
jen ještě přijít na to,jak zařídit aby tam nebylo 250 řádku "server nepřipojen"

A co takhle klasicky:
Kód: [Vybrat]
if .......; then
.........
else
notify-send "nepřipojeno"
fi

???
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 18 Června 2020, 08:26:26
@juwa2
nj, ale if-fi se provede jen jednou, pokud tam nepřidáš něco na smyčku. Na stránce ze které jsem čerpal kód tam také něco mají na principu if-fi a return (smyčka), ale mě to nefachčilo. Resp. smyčka běžela dál, i když byla splněna podmínka ping, a nebo naopak, v trochou jiné verzi, kód proběhl, skončil, ale ani se nespustil daemon. Tak jsem to opustil a zkusil jsem ten while-done. Ten fungoval a tak jsem to zatím víc neřešil.

Zkusil jsme k ping dát parametr -q , což by měl být nějaký tichý režim,bez výpisu. Ale stejně,pokud je odpojená síť, to v terminálu hlásí "Server nepřipojen" ....nebo tak něco ;) nejsem teď u inkriminované stanice.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: panRajce 18 Června 2020, 10:05:45
To je práve to, čo mám v tej funkcii vyriešné. Nútené ukončenie po 120 sekundách ak server neodpovedá.

No zkusil jsem tu funkci implementovat, ale asi blbě, protože mě skript prolítl jak vítr ve strništi a ani nespustil daemona.
Ale hádám, že je to špatným pochopením a implementací funkcionalit.
každopádně se k němu určitě ještě do budoucna vrátím a separuji si jej pro jinou funkci, kterou používám v poněkud jiném tvaru, ale hodila by se mi právě tvá závislost na časovém omezení.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 18 Června 2020, 10:13:38
Vyskúšaj ten ping spraviť tak, ako to mám v tej funkcii. Inak tie funkcie si môžeš priamo okopírovať do svojho skriptu. Dávajú sa na začiatok skriptu. Volanie funkcie musí nasledovať neskôr.
Název: Re:20.04 - skript po startu až po přihlášení do sítě
Přispěvatel: West 18 Června 2020, 10:43:42
Jo sorry, volanie tej funkcie má vyzerať takto:

HOST="192.168.1.1"

is_network_online $HOST
if [ $? = 0 ]; then
  echo "Start my action"
  start_my_action
else
  echo "Error: network is offline"
fi