2016-04-01 27 views
0

Bir işlemin tüm oluşumlarını öldürmeye çalışıyorum, ilk öğeden sonra aslında bir yineleme durur, burada neyin var?Bash komut dosyası, PID'ler üzerinde yineleyin ve öğeleri öldürün

#!/usr/bin/env bash 

SUPERVISORCLS=($(pidof supervisorctl)) 

for i in "${SUPERVISORCLS[@]}" 
    do 
     echo $i 
     exec sudo kill -9 ${i} 
    done 

ben yeniden başlatma komut dosyası için çözüm olarak böyle sth çalıştı, ama iyi senaryo her zaman olduğu gibi her zaman blok tek idam edildi ise toplam yapılmaması önce.?

ERROR0=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1) 

if [ "$ERROR0" ];then 
    exec sudo pkill supervisord 
    exec sudo supervisord -c /etc/supervisor/supervisord.conf 
    echo restarted supervisord 
fi 

ERROR1=$(sudo supervisord -c /etc/supervisor/supervisord.conf 2>&1) 

if [ "$ERROR1" ];then 
    exec sudo pkill -9 supervisorctl 
    exec sudo supervisorctl -c /etc/supervisor/supervisord.conf 
    echo restarted supervisorctl 
fi 

cevap

2

exec buna argüman var yürütülebilir ile süreci değiştirir, bu yüzden bir exec vurur sonra da komut başka bir ifade yürütmek asla. Prosesiniz artık mevcut olmayacak. İlk örnekte işleminiz artık scriptiniz olmayacak, ikinci olarak kill ve pkill olacaktır.

Düzeltmek için, tüm bu satırlardan exec'u kaldırmanız yeterlidir. Bu gerekli değil. Bir komut dosyası yürütülürken, kabuk zaten her satırdaki komutları yürütecek, bunu yapmak zorunda olmadığını söylemeniz gerekmez.

İlgili konular