Bir python betiğini arka planda çalıştır ve çöküşte yeniden başlat


4

Her zaman ubuntu 12.04 sunucumda çalıştırmak istediğim çok basit bir Python betiğim var. Upstart + monit kullanmayı düşündüm. Sorun şu ki, bu araçlar benim gibi basit bir ölümlü için oldukça karmaşık görünüyor ve web'de basit bir örnek bulamıyorum.

Starttart + Monit Overkill mi? Biri daha basit bir alternatif biliyor mu? / veya iyi bir eğitim?


Sadece betiğin çalışmasını istediğim için yeterince başlangıç ​​değil mi? Monit sadece periyodik olarak doğru bir test yapmak için gereklidir!
sebpiq

Yanıtlar:


9

Den alınan bu cevap :

Bir bash betiği yazabilirsin monitor.sh python komut dosyanızı başlatır ve çökerse yeniden başlatır ancak komut dosyası normal olarak çıkarsa yeniden başlatmaz:

#!/bin/bash
until myscript.py; do
    echo "'myscript.py' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

Ardından, arka planda monitör komut dosyasını başlatmanız yeterlidir:

nohup monitor.sh &

Alternatif olarak nohup, ayrıca düşünebilirsiniz tmux veya ekran arka plan işlemlerini yürütmek için.


Bir cazibe gibi çalışır ve çok kolay! Teşekkürler :)
sebpiq

1

Yukarıdaki cevap harika. Şu andan itibaren yorum yapamam, bu yüzden belki de cevabı burada düzelt.

Hatta "myscript" için bir python betiği olduğu ve bash env dosyasının altında çalışmadığı için bir işlev yazmak bile isteyebilirsiniz.

Yani,

#!/bin/bash

myscript(){
    python3 myscript [args..]
}

until myscript; do
    echo "'myscript' crashed with exit code $?. Restarting..." >&2
    sleep 1
done

Piton veya bash için yeni insanlar bu küçük şeyi bilemez. Onlara yardım edebilir. Başlangıçta böyle küçük şeylerle mücadele ederdim. Başkalarının istemesini istemiyorum!


Eğer python betiği uygunsa tamamen gereksizdir. mesele . Ve bu shebang uygun Python versiyonunu gösterecektir.
xenoid

Peki ya değilse?
Neil Agarwal

Bazı şeyleri işe yaramazlarsa yeni başlayanlar anlama bahanesiyle yayınlarım. Herkesin bir shebang'ın ne olduğunu bilmesi gerekmez.
Neil Agarwal

Peki ya değilse? Sonra bir tane eklersiniz.
xenoid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.