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?
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
$i -ge $serverCounter
döngü içinde biri (burada sadece durum yakalar birlikte fazla$i -eq $serverCounter
). Kodunuz yazıldığı gibi hala N'ninKontrol
nerede olduğuna dair N paralel örnekleri başlayacaktırserverCounter/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.