Bir uygulama betiği çöktüğünde yeniden çalıştırılsın mı?


18

Her zaman dizüstü bilgisayarımda çalışması gereken bazı uygulamalar var.

Bu uygulamaları başlatmak için bir bash betiği kullanıyorum. Senaryomda buna benzer bir döngü var:

while true;
do
    xterm
done

Bu bir uygulamayı çalıştırır ( xtermbu durumda) ve uygulama çökerse döngü yeniden başlar.

Bunun bir dezavantajı, bu döngüden "temiz" çıkış olmamasıdır. Bu nedenle, kullanıcının amacı kapanacak olsa bile xterm, döngü yeniden başlatır.

Bir uygulamayı bash komut dosyasından başlatmanın , çalışıp çalışmadığını izlemenin, komut dosyası çöktüğünde yeniden çalıştırmanın veya kullanıcı düzgün kapatması durumunda hiçbir şey yapmanın bir yolu var mı ?

Yanıtlar:


30

Bunu dene:

while true; do xterm && break; done

Uygulamaların çıkış durum kodları vardır, böylece bir şey iyi çıkarsa sıfır döndürür ... Ve bir şeyler ters giderse, başka bir sayı atar. Bu, insanların içeri girmesini ve kesin sorunu bulmasını sağlar. Diğer cevap budur.

&&sadece önceki komutun sıfır durumlu bir çıkış olup olmadığını kontrol eder ve eğer öyleyse döngüyü kırar. Eğer çökerse 0 dışında bir şey fırlatacak ve && ...madde tetiklemeyecektir; geri dönüp koşacak xterm.


6
Bu oldukça zarif.
Oli

Hmm .. Diğer yol da:while xterm; do true; done
muru

1
@muru: Bu benim için çalışıyor:while ! xterm; do :; done
Cyrus

1
@Cyrus Ah, evet. unuttum !.
muru

Bir canavar yarattım. Nasıl öldürürüm?
Tony Ruth

6

Böyle bir whiledurumda çıkış durumunun xtermbaşarılı olup olmadığını test edebilirsiniz :

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done

$? değişkeni son yürütülen komutun çıkış durumunu tutar.


0

Kullanmanızı öneririm.

xterm'e kadar; echo "program $ durumu ile sona erdi mi?" ; tamam

Bu, program öldürüldüğünde yeniden çalıştırılır.


0

Kullanım süpervizörü deneyin çok basit ve çalıştırmak için program veya komut dosyası eklemek kolaydır . Eğer gerekmez asgari olarak size durumda commandve belki exitcodesde programx kesiti configure.

Varsayılan exitcodesdeğer 0,2'dir, yani:

süpervizör bu listede tanımlanmayan bir çıkış koduyla çıkarsa işlemi yeniden başlatacaktır

Genel olarak istediğiniz: komut dosyası çöktüğünde yeniden çalıştırın veya kullanıcı düzgün kapattıysa (veya komut dosyası başarıyla tamamlandığında) hiçbir şey yapmayın

önce en basit yapılandırmayı deneyin:

[program:you_app_name]
command=/path/to/you/app

Daha fazla esneklik için Yapılandırma dosyası belgelerine bakın.

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.