skript-terminal

Sekcia: Aplikácie & Desktop 27.11 | 19:46
Avatar matolin   Návštevník

Chcem Vas poprosit o radu. Som v Linuxe laik. Potreboval by som poradit, ako by mal vyzerat skript, ktory po kliknuti na neho spusti terminal, bez dalsieho potvrdzovania - vykona co potrebujem a terminal ostane bezat pokym ho sam nezavriem, dakujem za info.

    • RE: skript-terminal 27.11 | 19:50
      Avatar Pepe_Cheb   Návštevník

      To záleží jaký máš instalovaný terminál , na každém linuxu bude vypadat jinak (a nebo se udělá srovnávací databáze která bude kontrolovat nainstalované aplikace a podle toho spustí správný terminál) , xterm má jiné parametry než třeba lx-terminal a pod.

      • RE: skript-terminal 27.11 | 19:53
        Avatar matolin   Návštevník

        pouzivam Ubuntu MATE, cize mate-terminal

    • RE: skript-terminal 27.11 | 20:13
      Avatar Pepe_Cheb   Návštevník

      No na ploše uděláš soubor script.desktop a to asi v nějakém editoru textu [Desktop Entry] Name=Script Comment=Můj script Exec=mate-terminal --working-directory="/home/ivan/" --command "bash -c /home/invan/script.sh" Icon=/home/ivan/script.png Terminal=false Type=Application Categories=Utility;Application; vytvoříš si script.sh ve své domovské složce

      #!/bin/bash echo "BAF" a nakopíruješ si nějakou ikonu /home/ivan/script.png Netestováno je to jen nástřel , nemam linux po ruce.

      • RE: skript-terminal 27.11 | 20:14
        Avatar Pepe_Cheb   Návštevník
        No na ploše uděláš soubor script.desktop a to asi v nějakém editoru textu 
        
        [Desktop Entry] 
        Name=Script 
        Comment=Můj script 
        Exec=mate-terminal --working-directory="/home/ivan/" --command "bash -c /home/invan/script.sh"
        Icon=/home/ivan/script.png 
        Terminal=false 
        Type=Application Categories=Utility;Application; 
        
        
        vytvoříš si script.sh ve své domovské složce
        
        #!/bin/bash 
        echo "BAF" 
        
        
        a nakopíruješ si nějakou ikonu /home/ivan/script.png 
        
        Netestováno je to jen nástřel , nemam linux po ruce.
        • RE: skript-terminal 27.11 | 20:47
          Avatar matolin   Návštevník

          dik, tak som to vyskusal a vypisalo mi "Pri spustani programu nastala chyba."

    • RE: skript-terminal 27.11 | 21:26
      Avatar WlaSaTy   Návštevník

      A čo si pod tým predstavujete vojín kefalín?

      Mala by to byť len domáca úloha kde sa ti po kliknutí na ikonku otvorí niečo v termináli a ten sa po ukončení nezavre, alebo by to malo samé v piatok o pol desiatej večer spustiť účtovnú uzávierku a poklikať na nejaké tlačítka zatial čo ty budeš na pive a budú ti nabiehať nadčasy?

      • RE: skript-terminal 28.11 | 07:18
        Avatar matolin   Návštevník

        Ano, presne tak ako pises, potrebujem si nieco zautomatizovat. Script ktory mi spusta danu ulohu mam funkcny, len nanho treba fyzicky kliknut rucne a potvrdit "Spustit v terminali". Moja predstava je taka, ze napriklad kazdych 6hodin sa automaticky zavrie terminal v ktorom uloha bezi a po chvili hned spusti nova a o 6hodin zas, stale dookola. Zatial som si cez "crontab -e" nastavil cas 6hodin, uz len poriesit aby sa ten script sam spustil. Na ukoncenie by som pouzil "killall mate-terminal". Ale ako som uz pisal, v Linuxe som laik, takze len sa snazim nejak dat dokopy ako by to mohlo fungovat. Dakujem za akekolvek info.

        • RE: skript-terminal 28.11 | 11:37
          Avatar WlaSaTy   Návštevník

          Keď zabiješ terminál, tak nemusíš zabiť aj procesy v ňom spustené. Takýto istá problém je aj v iných OS vrátane DOS, OS2 alebo aj Windows, toto nie je špecifikum Linuxu.

          Rozumnejšie by bolo buď periodicky spúšťať spracovanie z cronu tak aby zapisovalo výstup do logu, a ten budeš mať bez killovania zobrazený v nejakom termináli. Samozrejmosťou je ošetriť si duplikátny beh.

          Ďalšia možnosť je volať ten skript z nekonečnej slučky v tom termináli v ktorej budeš na prázdno čakať cca 6 hodín.

          #!/bin/bash
          
          while true
          do
            echo idem spustit spracovanie o `date`
            cd /do/nejakeho/adresara/kde/by/som/mal/byt/
            /cesta/k/skriptu/skript parametre dalsie parametre "a parameter s medzerou"
            echo skript ukonceny s navratovym kodom $? o `date` a spim 6 hodin
            sleep 6h
          done
          

          • RE: skript-terminal 28.11 | 20:50
            Avatar matolin   Návštevník

            OK, cize spustim tento script

            #!/bin/bash

            while true

            do

            echo idem spustit spracovanie o `date`

            cd /home/mato/

            ./moj_script.sh a tu bezi moj script ale on stale bezi, cize tento uz dalej nepokracuje

            echo skript ukonceny s navratovym kodom $? o `date` a spim 6 hodin

            sleep 6h

            done

            takze to treba este trochu doladit, hm, mas nejaky napad?

    • RE: skript-terminal 28.11 | 14:14
      Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

      Dopíš na konec skriptu exec bash

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • RE: skript-terminal 28.11 | 18:16
        Avatar WlaSaTy   Návštevník

        A to mu splní ktorú časť požiadavky?

        • RE: skript-terminal 28.11 | 20:40
          Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

          Presne to čo chcel, že sa terminál nezavrie, pokiaľ ho nezavrie on.

          mate-terminal /home/matolin/test.sh

          Stačí si vyskúšať so skriptom test.sh:

          echo 123;
          exec bash

          Funguje to v každom emulátore terminálu. Ešte tichší výstup by sa dal spraviť cez:

          echo 123;
          exec bash > /dev/null
          Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
          • RE: skript-terminal 28.11 | 21:06
            Avatar matolin   Návštevník

            ono v podstate by sa terminal ani nemusel zatvarat, stacilo by, keby som raz zapol script, hoci rucne a potom by mohol bezat stale a vytvaral by automaticky novy log kazdych 6hodin, ak by bolo treb, tak znovu by som ho vypol rucne. hm.

            • RE: skript-terminal 28.11 | 21:17
              Avatar WlaSaTy   Návštevník

              Vyššie máš takú stále bežiacu slučku s čakačkou 6 hodín.

              Ale bedňu som sa pýtal že či si všimol že to nerieši tvoj problém, len to transmutuje na kopec zbytočných okien. I keď na druhú stranu tá požiadavka bola taká.

              • RE: skript-terminal 28.11 | 21:26
                Avatar matolin   Návštevník

                OK, cize spustim tento script

                #!/bin/bash

                while true

                do

                echo idem spustit spracovanie o `date`

                cd /home/mato/

                ./moj_script.sh a tu bezi moj script ale on stale bezi, cize tento uz dalej nepokracuje, ci?

                echo skript ukonceny s navratovym kodom $? o `date` a spim 6 hodin

                sleep 6h

                done

                takze to treba este trochu doladit, hm, mas nejaky napad?

                • RE: skript-terminal 28.11 | 21:41
                  Avatar WlaSaTy   Návštevník

                  Ten prvý otáznik vieš zodpovedať len ty, nik iný nevie ako si naprogramoval ./moj_script.sh. Druhý otáznik si použil len na zdôraznenie toho prvého.

                • RE: skript-terminal 28.11 | 22:26
                  Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

                  Rekurzívny skript beží aj milión rokov, pokiaľ ho neukončíš, alebo nieje splnená podmienka. Teraz som sa úplne stratil, pretože pôvodná otázka bola iná.

                  Ty voláš v skripte iný skript? Pokiaľ chceš vedieť, či pôvodný skript čaká na výsledok, tak čaká ak na výsledok čakáš.

                  Jako fakt to buď napíš konkrétnejšie, alebo to celé hoď na pastebin aby sme vedeli o čom je reč.

                  Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
                • RE: skript-terminal 28.11 | 22:36
                  Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

                  Alebo sa pýtaš na to, či keď skript, ktorý spustí iný skript, či ten "nadradený" inak sa tomu hovorí rodíč beží ďalej? Beží ďalej pokiaľ čaká na výsledok svojho potomka, alebo robí iné činnosti ako spúšťanie ďalších skriptov.

                  Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
    • RE: skript-terminal 29.11 | 08:16
      Avatar matolin   Návštevník

      OK, podme este raz od zaciatku. Mozno som to zle vysvetlil a medzitym som sa posunul dalej, takze uz sa to zmenilo. Mam funkcny script, ktory som neprogramoval ja, som len obycajny uzivatel. Nazvyme ho "mojscript". Kliknem nanho, potom kliknem spustit v terminaly a otvori sa terminal a vykonavaju sa veci co treba, pritom terminal je stale otvoreny a zobrazuju sa v nom udaje, neviem ako sa to nazyva odborne, vysvetlujem to len tak polopate, cize to stale bezi. Ja som si to chcel trochu zautomatizvat, tak som hladal nieco cez google a podarilo sa mi doplnit do toho scriptu logovanie cez tee s tym, ze po kazdom zapnuti mi vytvori log s datumom a casom v nazve. Toto zatial funguje k mojej spokojnosti. Dalsiu vec co by som chcel doplnit je, aby sa ten log po napr.6hodinach ukoncil a vytvoril sa novy atd. kazdych 6hodin. Cize som si myslel, ze treba vytvorit dalsi script ktory by uzavrel cely ten proces a zacal novy, preto som skusal cron, killall mate-terminal, cize co google dal, hi, ale asi staci ukoncit ten log a spustit nove logovanie, cize mozno len doplnit nejaky prikaz do toho "mojscript". Tak ako som pisal na zaciatku, som v Linuxe laik, len uzivatel, ktory klika na hotove veci, takze sa vam zadaju moje otazky divne, lebo sa v tom velmi nevyznam, ale rad by som si to trochu prisposobil v ramci moznosti ak sa to da, pripadne sa daco priucil, hm.

      • RE: skript-terminal 29.11 | 08:57
        Avatar WlaSaTy   Návštevník

        Mne osobne sa tvoje otázky nezdajú divné. Divná mi príde len formulácia. V odborných kruhoch sa nazýva "neviem presne čo chcem, ale viem ako to dosiahnem".

        Nejako stále nerozumiem čo by to malo robiť, a načo je grafický terminál súčasťou skriptu. Ak som ťa pochopil, tak chceš mať log z nejakého spracovania zrolovaný každých 6 hodín aj s reštartom toho skriptu čo zabezpečuje spracovanie. Ak si ten skript neprogramoval ty, tak s tým skús osloviť autora. To bude vzhľadom na definíciu požiadavky najjednoduchšie a najrýchlejšie. Ak by si ovšem vedel zadefinovať čo chceš dosiahnuť, tak to sem kľudne napíš. Bez toho sa nedá pohnúť ďalej.

    • RE: skript-terminal 29.11 | 09:08
      Avatar matolin   Návštevník

      script sa nemusi restartovat, ak to nieje potrebne, staci mi len aby sa vytvoril samostatny log kazdych 6hodin. Teraz to mam takto

      tee logfile_$(date '+%Y-%m-%d-%H-%M').log

    • RE: skript-terminal 29.11 | 09:30
      Avatar Branislav Poldauf Arch (antergos), Debian stable  Používateľ

      ja by som sa to pokusil riešiť tak že do toho hotového skriptu by sa pridal timeout (alebo iný spôsob ukončenia po uplynutí času) na 5h 59m a v crone by som nastavil aby ho spúšťal každých 6h

      ten minutovy rozdiel pre istotu, neviem co by sa stalo/mohlo stať ak by sa spustil 2x súbežne (aj keď to sa asi dá ošetriť aj inak)

      Linux: the operating system with a CLUE... Command Line User Environment
      • RE: skript-terminal 29.11 | 10:24
        Avatar WlaSaTy   Návštevník

        Možností je veľa. Jedna z nich je preklopiť to na službu, a 4x denne ju reštartovať. SystemD sa postará o ukončenie všetkých dcérskych procesov.

        Ale to je asi úplne zbytočné rozoberať pokiaľ človek nevie čo to robí. Tých pár krokov okolo by sa k tomu pridalo. Môj odhad je že tam už jednu nekonečnú slučku má, a v nej spúšťa program čo po vykonaní úlohy skončí. A slučka sa postará o počkanie cez sleep, a znovu spustenie toho spracovania v nekonečnom cykle.

        Teoreticky je aj možné v tom jeho skripte volá program čo beží donekonečna, a pracuje len keď má čo. A ten program má zadefinované korektné ukončenie nejakým spôsobom. Aj to som už videl.

        A presne toto je dôvod, prečo by mal buď povedať čo chce, alebo kontaktovať pôvodného autora. Akékoľvek riešenie na zle zadanú požiadavku bude mať za následok nepredpokladaný stav.

    • RE: skript-terminal 29.11 | 20:16
      Avatar matolin   Návštevník

      no ja som si myslel, ze kazdy ukon ktory vykonam ja fyzicky rucne sa da napisat prikazmi v scripte a system to urobi za mna automaticky

      cize asi takto:

      1. otvor terminal

      2. maximalizuj okno

      3. spusti script

      4. cakaj 6hodin

      5. zatvor okno

      6. vrat sa na bod 1

      to je vsetko co potrebujem

      ak sa to neda, kaslite na to

      • RE: skript-terminal 29.11 | 21:11
        Avatar WlaSaTy   Návštevník

        Dá,

        ale dorobiť si to do práce už budeš musieť sám. A znova ti opakujem, že to čo chceš ti vytvorí problémy v konzistencii. Ale následky za to si budeš skôr alebo neskôr niesť sám.

        while true
        do
          mate-terminal --maximize /voľakde/ten_skript &
          sleep 5m
          kill -9 `jobs -p`
        done
        
      • RE: skript-terminal 30.11 | 08:51
        Avatar Branislav Poldauf Arch (antergos), Debian stable  Používateľ

        na to aby si v pozadi spustil nejaky skript, napríklad cez spomínaný cron, nepotrebujes aby sa ti otvoril terminal

        vela linuxovych instalacii je bez grafickeho rozhrania a podmienovat nieco otvorením garickeho emulatora terminalu (lebo to co ti vidis v grafickom prostredí je emulator terminálu) je zbytocne

        cron ti zabezpeci ze sa ti pravidelne (pravidelnosť vieš krásne nastaviť) bude spúšťať nejaký príkaz (alebo aj skript), nemusis ho ani prvy krat spustit manualne klikanim ani nic podobne, staci ze ti bude ten system bezat a ten skript sa ti bude sam spustat podla pravidiel nastavených v crone

        v skratke body 1.,2. a 5. sú zbytočné skriptovať, ak tvojim cielom je aby ten skript vykonal svoju funkciu a nie aby sa to okno otvorilo (ale to nám stále tajíš - čo je tvojím cieľom)

        Linux: the operating system with a CLUE... Command Line User Environment
    • RE: skript-terminal 29.11 | 21:44
      Avatar bedňa antiX, Devuan, LegacyIce  Administrátor

      Ako tu už bolo spomenuté najlepšie riešenie bude cez cron a ty nič manuálne spúšťať nebudeš.

      Ak s tým máš problém napíš.

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org