Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: moonstone - 15.08.07 - klo:13.57

Otsikko: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]
Kirjoitti: moonstone - 15.08.07 - klo:13.57
Hei,

Tarvitsisin bash skriptin joka tarkistaa onko firefox käynnissä ja jos ei ole firefox käynnisttäisiin.
Käsittääkseni tuon voi tehdä helposti while ja if syntakseja käyttäen yhdistettynä vaikka pstree komentoon.

pstree komento tulostaa seuraavanlaisen rimpsun
pstree | grep firefox
|-firefox-bin--7*[{firefox-bin}]

kuinka saan tuon siistittyä niin, jotta sama komento tuottaisi vaan rivin
firefox-bin

Tällöin osaisin itse tehdä if lausekkeen joka lukisi kyseisen tulosteen ja suorittaisi lauseketta eteenpäin.
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: Fa1r - 15.08.07 - klo:14.26
Humm, käyttäisin itse komentoa 'pgrep'.

Varsinaiseen kysymykseen vastaus lienee komento 'pstree | grep -o firefox-bin | head -n 1', mutta varsinaista hyötyä komennosta on vaikea havaita.

Jotakin tällaista:
Koodia: [Valitse]
# Suoritetaan hamaan tappiin asti
while (1)
{
   [ $(pgrep firefox) ] || firefox &

       # ootellaan vaikka minuutti
   sleep 60
}

E: körh-öhm, siis komentohan firefoksin käynnistämiseen on pelkkä 'firefox' vrt. prosessin nimi 'firefox-bin'
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: moonstone - 15.08.07 - klo:14.38
testi.sh
Koodia: [Valitse]
#!/bin/bash
# Suoritetaan hamaan tappiin asti

while (1)
{
   [ $(pgrep firefox) ] || firefox &

       # ootellaan vaikka minuutti
   sleep 60
}

aleksi@debian:~$ ./testi.sh
./while.sh: line 11: syntax error: unexpected end of file
 ????
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: Tuplanolla - 15.08.07 - klo:15.31
Miksi siinä pitää käyttää komentoa pstree? Eikö normaali ps kelpaisi paremmin, sitä saa siistittyä helpommin?
Koodia: [Valitse]
ps -A | grep bash | tail -c 5
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: Fa1r - 15.08.07 - klo:15.32
testi.sh
Koodia: [Valitse]
#!/bin/bash
# Suoritetaan hamaan tappiin asti

while (1)
{
   [ $(pgrep firefox) ] || firefox &

       # ootellaan vaikka minuutti
   sleep 60
}

aleksi@debian:~$ ./testi.sh
./while.sh: line 11: syntax error: unexpected end of file
 ????

while-kielioppi hukassa, korjataanpa. Nyt pitäisi toimia:
Koodia: [Valitse]
#!/bin/bash

while (true)
do
        while [ ! $(pgrep firefox) ]
        do
                firefox &
                # Jos halutaan taukoa, tähän kohtaan 'sleep' -komentoa, minuutin tauko on esim.
                # sleep 60
        done
done
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: Fa1r - 15.08.07 - klo:15.52
Miksi siinä pitää käyttää komentoa pstree? Eikö normaali ps kelpaisi paremmin, sitä saa siistittyä helpommin?
Koodia: [Valitse]
ps -A | grep bash | tail -c 5

Koodia: [Valitse]
ps -A -o comm | grep -m 1 bash #Pelkät komennot @ ps -o comm; ylimääräiset entryt poistuu @ grep -m 1
ps -A | grep -m 1 -o bash #Mätsäävät kirjaimet näytetään @ grep -o
ps -A | grep -c bash # ja näin lasketaan noiden prosessien määrä @ grep -c
ps -A | grep -c -m 1 bash # lisätään vielä -m 1 niin saadaan tulokseksi 1 jos prosessi löytyy, muuten 0

Tekemisen vapaus ;)

E: +2
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: moonstone - 16.08.07 - klo:19.16
Kiitos opastuksesta. Toimii niinkuin pitääkin !!
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä
Kirjoitti: mgronber - 17.08.07 - klo:11.30
Koodia: [Valitse]
#!/bin/bash

while (true)
do
        while [ ! $(pgrep firefox) ]
        do
                firefox &
                # Jos halutaan taukoa, tähän kohtaan 'sleep' -komentoa, minuutin tauko on esim.
                # sleep 60
        done
done

Sleep-komentoa on syytä käyttää jotta prosessoria ei kuormiteta turhaan busy-loopilla. Lisäksi se pitää sijoittaa ulompaan silmukkaan tai muuten siitä ei ole mitään iloa.
Koodia: [Valitse]
#!/bin/bash

while (true); do
        while [ ! $(pgrep firefox) ]; do
                firefox &
        done
        sleep 5
done
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]
Kirjoitti: Fa1r - 17.08.07 - klo:15.45
Sleep-komentoa on syytä käyttää jotta prosessoria ei kuormiteta turhaan busy-loopilla.
Sitäpä halusinkin tuolla kommenttikohdallani sanoa, ilmeisesti en kuitenkaan riittävän selkeästi.

Lisäksi se pitää sijoittaa ulompaan silmukkaan tai muuten siitä ei ole mitään iloa.

Sleep-komennon paikalla ei näiden looppien välillä liene mitään käytännön merkitystä; se nukuttaa ohjelman kuitenkin halutuksi hetkiseksi. Minulla se vain vaikutti toimivan keskiloopin sisällä paremmin kuin ulomman.

Eli jäi sangen sisällöttömäksi viestisi, mutta toki haluan 'skriptigurun' mielipiteitäsi lueskella :)
Otsikko: Vs: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]
Kirjoitti: mgronber - 18.08.07 - klo:01.16
Sleep-komentoa on syytä käyttää jotta prosessoria ei kuormiteta turhaan busy-loopilla.
Sitäpä halusinkin tuolla kommenttikohdallani sanoa, ilmeisesti en kuitenkaan riittävän selkeästi.

Minusta sen tarpeellisuutta olisi voinut alleviivata hieman enemmän esimerkiksi jättämällä sen sleep-komennon oletuksena kommentoimatta. Tosin pelkästään tämän takia en olisi vaivautunut kommentoimaan viestiä vaan pääsyy oli tuon komennon väärä sijainti silmukoissa :)

Lisäksi se pitää sijoittaa ulompaan silmukkaan tai muuten siitä ei ole mitään iloa.

Sleep-komennon paikalla ei näiden looppien välillä liene mitään käytännön merkitystä; se nukuttaa ohjelman kuitenkin halutuksi hetkiseksi. Minulla se vain vaikutti toimivan keskiloopin sisällä paremmin kuin ulomman.

Sisemmän silmukan sisällä sleep suoritetaan vain kerran firefoxin käynnistämisen jälkeen. Tämän jälkeen ulompi silmukka pyörii "täysillä" koska sisempää silmukkaa ei suoriteta lainkaan firefoxin ollessa käynnissä.