Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ubuntu Python koodin suorittaminen putkeen nohupilla

E1ss [19.04.2019 21:35:59]

#

Taas kyselen tälläistä purukumilla renkaan korjaus tekniikkaa koska en tähän hätään saa korjattua koodia. Ongelma on siis että käytän Python serveriä ja jostain syystä se sammuttaa itsensä aina välillä. Minun pitäisi siis saada suoritettua sama Python koodi aina kun vanha keskeytyy. Huomasin että saan tämän toteutettua komentoriville kirjoittamalla:
while true; do python code.py done
mutta ongelma on siinä että haluan saada tämän nohupilla taustalle siten ettei tarvitse olla terminaali auki. Tein sitten koodin jossa oli tämä sama juttu ja laitoin sen koodin sitten taustalle nohup run.sh komennolla ja tuloksena oli tietenkin se että tämä koodi aloitti satoja kertoja saman koodin päällekkäin jolloin serveri kaatui. Tarvitsen NOPEASTI jonkun tämän tyylisen ratkaisun ennenkuin kerkeän selvittämään mistä oikeasti on kyse. Miten siis saan suoritettua taustalla aina saman koodin kun se pysähtyy?

Grez [19.04.2019 21:51:58]

#

E1ss kirjoitti:

Tarvitsen NOPEASTI jonkun tämän tyylisen ratkaisun ennenkuin kerkeän selvittämään mistä oikeasti on kyse. Miten siis saan suoritettua taustalla aina saman koodin kun se pysähtyy?

Tulis mieleen purkkaviritys että pistä koneelle screen päälle ja aja skripti siellä. Kaiken järjen mukaan tuossa on ongelmana että nohup:lla ajettuna skripti käyttäytyy jossain määrin eri tavalla. Screenissä ajettuna sen voisi kuvitella samalla tavalla kuin normaalistikin suoraan shellistä ajaessa, mutta sen kuitenkin voisi jättää taustalle.

E1ss [19.04.2019 21:57:37]

#

En ole ihan varma toimiiko mutta löysinkin vastaavan ongelman netistä. https://stackoverflow.com/questions/788411/check-to-see-if-python-script-is-running Ainakin tuntuu toimivan mutta saa nähdä pyöriikö aamulla.

Metabolix [20.04.2019 16:08:54]

#

Grezin ehdottama screen on tähän looginen ratkaisu.

Löytämäsi koodi luo tiedoston ohjelman alussa ja poistaa tiedoston ohjelman lopussa. Jos ohjelma aivan kaatuu, et ehkä saa tiedostoa poistettua. Jos ajat tuon nohupilla, päädyt käynnistämään satoja ohjelmia, jotka vain tarkastavat, onko tiedosto olemassa, ja sammuvat sitten.

Jos tuo ratkaisu toimii, luultavasti voisit yhtä hyvin toteuttaa koko toistamisen ilman komentoriviä suoraan Python-koodissa näin:

while True:   # Ikuisesti...
  try:
    ohjelma() # Ajetaan ohjelmaa.
  except KeyboardInterrupt:
    break     # Control-C sulkee.
  except:
    pass      # Muussa virheessä jatketaan vain silmukkaa.

Edelleen parempi ratkaisu olisi se, että etsisit ohjelman kaatumisen syyn ja korjaisit sen.

Kuvittele: Huoneesi oven väliin valuu liimaa. Ovi liimautuu kiinni tunnissa. Miten ratkaiset tilanteen? Nyt olet ratkaissut ongelman sillä, että toistuvasti hakkaat oven auki ja pyyhit liimaa pois. Viisaampaa olisi selvittää, mistä liima tulee, ja estää liiman valuminen.

Grez [20.04.2019 18:28:42]

#

No itse kyllä alkuperäisestä viestistä ymmärsin, että itse ongelmakin on tarkoitus korjata, mutta siksi kunnes se onnistutaan tekemään tarvitaan purkkaviritys.

E1ss [20.04.2019 18:48:30]

#

Kiitos vastauksista. Tuo on kyllä parempi ratkaisu ja ehkä tämä väliaikaisuus onkin pidempi. Itsellä usein tuppaa jäämään tuollaiset jutut tekemättä kun viritelmät pitävät tarpeeksi hyvin :D.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta