Sonlu olmayan komut dosyası


0

Linux sunucularındaki bazı yapılandırmaları bir listeden kontrol etmek için bir komut dosyası yazdım. Listede çok fazla sunucu var, bu yüzden bu listeyi 10'a 10'a böldüm:

...
...
for ((i=0; i <= $serverCounter; i+=15))
do
    if [ $i -ge $serverCounter ]
    then
            exit
    else
            echo $i
            Kontrol $list &
            ((first+=15))
            ((last+=15))
    fi
done
...
...

Ancak bu durumda bu döngüden çıkamıyorum. Çıkmak için bir if koşulu eklediğimi görebilirsiniz ama işe yaramadı (neden olduğunu bilmiyorum).

EOL de "&" den ayrılmadan bu döngüden nasıl çıkarım?


5
Testiniz $i -ge $serverCounterdöngü içinde biri (burada sadece durum yakalar birlikte fazla $i -eq $serverCounter). Kodunuz yazıldığı gibi hala N'nin Kontrolnerede olduğuna dair N paralel örnekleri başlayacaktır serverCounter/15, bu nedenle probleminiz tüm bu örneklerin sonunda sisteminizi aşırı yüklemesi olabilir ve döngüyü devam ettirmek için yeterli CPU'nuz kalmamış olabilir. Kontrol'de aynı anda çalışan K örneklerinden daha fazlasına sahip olmak için daha karmaşık bir şey yazmanız gerekebilir.
— ksenoid

1
Döngünüz, olduğu gibi sınırlı miktarda çalışacaktır. ServerCounter'dan daha büyük olamayacağım, çünkü serverCounter'a olduğu gibi eşit veya daha büyük olduğunda var olacaktır.
— Ramhound

Aslında koşma ve bitirme konusunda bir sorun yok. Süreci ps -ef'te göremiyorum, bu yüzden komut dosyası bitebilir ancak son kontrolden sonra bash ekranına düşemiyorum. sadece imleç yanıp sönüyor. Sorun "&" yönlendirme üzerinde sanırım.
— Gefolge

yes @Ramhound Bunu biliyorum ama bu problemden sonra o satırı ekledim. Yani evet eğer if ifadesini giremiyorum ama yine de koşuldan önce döngüden çıkamadım.
— Gefolge

@Gololge - Çıkış koşulunuz, döngüyü kesen veya devam ettiren ek bir koşullu olmadıkça, döngünün her tekrarlaması için yalnızca bir kez değerlendirilir.
— Ramhound
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.