Kirjoittaja Aihe: Skripti, joka valvoo käynnissä olevaa ohjelmaa, ja tappaa duplikaatit?  (Luettu 3083 kertaa)

spark

  • Käyttäjä
  • Viestejä: 1752
    • Profiili
Ongelmana on, että on Killing Floor pelin serveri, ja on crontabissa on ajastuksessa monitor ohjelma, joka valvoo sen toimintaa minuutin välein. Joissain tilanteissa serveri ucc-bin-real ohjelma kaatuu, niin että monitorointi ei sitä saa sammumaan ja käynnistää rinnalle uuden serverin. Ja kohta nitä on useita roikkumassa prossutehoa ja muistia syömässä.

Onko mitenkään simppelisti tehtävissä tuohon rinnalle toinen monitorointi crontabiin, joka antaisi tappaisi vanhemman käynnissä olevan ohjelman (tai sitten molemmat)? Pitäisi vielä pystyä erottamaan eri käyttäjät, kun on kaksi serveriä pystyssä eri tunnuksien takana samassa koneeessa.

kamara

  • Käyttäjä
  • Viestejä: 3032
    • Profiili
Kirjoitan tämän, vaikka todennäköisesti tiedätkin kyseisen käskyn...

Tämä tappaa kaikki ohjelma-nimiset säikeet.
Koodia: [Valitse]
killall ohjelma

Sen jälkeen kannattaa käynnistää haluttu ohjelma uudestaan käyntiin.

spark

  • Käyttäjä
  • Viestejä: 1752
    • Profiili
Lisäsin rivin pkill ucc-bin-real monitor skriptin käynnistämän stop scriptin loppuun. Tuolla näyttäisi sammuvan kaikki käyttäjän ucc-bin-real ohjelmat. Ongelmana on, että se monitor skripti ei aina tunnista serverin olevan käynnissä, jos kerkeää kaksi ucc ohjelmaa aukeamaan.

Lainaus
[ INFO ] Monitor kf-server: Disabled: No lock file found
To enable monitor run ./kfserver start

Tuo nyt toimii toivottavasti tuollakin, mutta jos joku osaa scriptin vääntää, joka osaisi tarkistaa, jos kaksi ucc-bin-real ohjelmaa on käyttäjällä käynnissä, niin ajaisi pkill ucc-bin-real ja ./kfserver restart komennon niille.

On aika ikävä tilanne, kun huomaa, että serveri on juntturassa. Ei meinaa edes ssh yhteyttä saada terminaalista auki, kun prossu ja muistin käyttö on 100% :o

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Lainaus
On aika ikävä tilanne, kun huomaa, että serveri on juntturassa. Ei meinaa edes ssh yhteyttä saada terminaalista auki, kun prossu ja muistin käyttö on 100%

Kuormamonitori on ollut saatavilla ja käytössä jo pitkään.

http://forum.ubuntu-fi.org/index.php?topic=11295.msg349545#msg349545
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

spark

  • Käyttäjä
  • Viestejä: 1752
    • Profiili
Lainaus
On aika ikävä tilanne, kun huomaa, että serveri on juntturassa. Ei meinaa edes ssh yhteyttä saada terminaalista auki, kun prossu ja muistin käyttö on 100%

Kuormamonitori on ollut saatavilla ja käytössä jo pitkään.

http://forum.ubuntu-fi.org/index.php?topic=11295.msg349545#msg349545

Kiitos vinkistä. Ei vain tässä taida toimia, kun se yksi prosessi ei välttämättä kuormita, kuin parikymmentä prossaa, mutta useampi yhtäaikaa päällä vie sitten sata. Ainakin toistaiseksi on tuo pkill käsky pitänyt duplikaatit poissa, jospa tämä sillä nyt hoituu, kunnes serveriskriptin vääntäjä joskus saa bugit korjattua.

Postimies

  • Käyttäjä
  • Viestejä: 2644
    • Profiili
Ohjelman tappaa tehokkaasti
Koodia: [Valitse]
killall -9 ohjelma
Itse olen välillä miettinyt yksinkertaista tapaa
estää ohjelmaa käynnistymästä toista kertaa.
Yksi typerä tapa skriptissä on ensin killall ohjelma ja
sitten käynnistetään ohjelma. Jos käynnistää ohjelmia
kaukosäätimellä tulee helposti tuplia.
ps -A listaa käynnissä olevat ohjelmat.
Jos haluaa tietää vaikka onko amarok käynnissä,
niin  ps -A | grep amarok kertoo sen.
Tulokseksi tulee:
 938 ?        00:05:59 amarok

Se miten tuosta väsää skriptin, joka osaa tappaa
halutut softat en ihan osaa tältä istumalta.
Jonkinlainen idea tuossa on.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Ohjelman tappaa tehokkaasti
Koodia: [Valitse]
killall -9 ohjelma
Itse olen välillä miettinyt yksinkertaista tapaa
estää ohjelmaa käynnistymästä toista kertaa.
Yksi typerä tapa skriptissä on ensin killall ohjelma ja
sitten käynnistetään ohjelma. Jos käynnistää ohjelmia
kaukosäätimellä tulee helposti tuplia.
ps -A listaa käynnissä olevat ohjelmat.
Jos haluaa tietää vaikka onko amarok käynnissä,
niin  ps -A | grep amarok kertoo sen.
Tulokseksi tulee:
 938 ?        00:05:59 amarok

Se miten tuosta väsää skriptin, joka osaa tappaa
halutut softat en ihan osaa tältä istumalta.
Jonkinlainen idea tuossa on.

"pgrep" tekee tuon saman hieman lyhyemmin:

Koodia: [Valitse]
pgrep -lx amarok
938 amarok

Voit myös testata "pgrep": in tulosta:

Koodia: [Valitse]
[[ $(pgrep -x amarok) ]]  || amarok
eli jos ensimmäinen osa epäonnistuu niin ajetaan "amarok".  Tuo "x" tarkoittaa "exact match" eli nimen pitää olla tarkasti tuo "amarok".   Ehkä tuossa tapauksessa ei olisi ongelmia ilman "x": ää mutta esimerkiksi "ssh" voi tuottaa monta osumaa, vertaa:

Koodia: [Valitse]
pgrep -l ssh
789 sshd
2774 ssh-agent
14411 ssh
14415 sshfs

Koodia: [Valitse]
pgrep -lx ssh
14411 ssh
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.