Kirjoittaja Aihe: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]  (Luettu 4311 kertaa)

moonstone

  • Vieras
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.
« Viimeksi muokattu: 17.08.07 - klo:12.53 kirjoittanut Petri Järvisalo »

Fa1r

  • Käyttäjä
  • Viestejä: 221
  • Reply #1!
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #1 : 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'
« Viimeksi muokattu: 15.08.07 - klo:14.28 kirjoittanut Fa1r »
What you don't know can hurt you, only you won't know it.
--$(fortune)
Elastisen Linux-biisi

moonstone

  • Vieras
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #2 : 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
 ????

Tuplanolla

  • Käyttäjä
  • Viestejä: 1420
  • Reg. Linux user #423604
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #3 : 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
Lisää [ratkaistu] ketjun ensimmäisen viestin otsikkoon, kun ongelma ratkeaa!

Fa1r

  • Käyttäjä
  • Viestejä: 221
  • Reply #1!
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #4 : 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
« Viimeksi muokattu: 15.08.07 - klo:15.36 kirjoittanut Fa1r »
What you don't know can hurt you, only you won't know it.
--$(fortune)
Elastisen Linux-biisi

Fa1r

  • Käyttäjä
  • Viestejä: 221
  • Reply #1!
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #5 : 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
« Viimeksi muokattu: 15.08.07 - klo:15.58 kirjoittanut Fa1r »
What you don't know can hurt you, only you won't know it.
--$(fortune)
Elastisen Linux-biisi

moonstone

  • Vieras
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #6 : 16.08.07 - klo:19.16 »
Kiitos opastuksesta. Toimii niinkuin pitääkin !!

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä
« Vastaus #7 : 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

Fa1r

  • Käyttäjä
  • Viestejä: 221
  • Reply #1!
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]
« Vastaus #8 : 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 :)
What you don't know can hurt you, only you won't know it.
--$(fortune)
Elastisen Linux-biisi

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: skripti joka tarkistaa onko firefox käynnissä [ratkaistu]
« Vastaus #9 : 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ä.