2015-06-02 222 views
1

我正在研究一個bash腳本,它將檢查+1000域是否已過期。我使用一個for循環遍歷/var/cpanel/users/*中的所有用戶。它適用於10個第一用戶(循環),然後它只是掛起。爲什麼我的bash腳本掛起?

奇怪的是我可以用Ctrl+Z停止腳本,然後用fg再次啓動腳本,它對於大約+10個用戶而言仍然正常工作,但之後它會再次掛起。

這是我scirpt:

# File that will have the result. 
file="domain-result.txt" 

printf "USER\t\tDOMAIN\t\t\tREPORT\n" > "$file" 
printf "\n" >> "$file" 

# For loop to iterate over all users in cpanel. 
for z in /var/cpanel/users/*; 
do 
    # Only files can be used. 
    if [[ -f "$z" ]] 
    then 

    # Get the domain name. 
    awk -F'=' '/DNS=/ {print $2}' "$z" | while read row; 
    do 
      # If there's no domain name than skip to next account. 
      if [[ -z "$row" ]]; then continue; fi 

      printf "Checking domain: %s...done\n" "$row" 

      # Execute whois command on the domain. 
      whois=$(/usr/bin/whois $row | grep 'not found') 

      # Get the username. 
      user=$(echo "$z" | awk -F'/' '{print $5}') 

      if [[ -n "$whois" ]] 
      then 
        printf "%s\t\t%s\t\t%s - EXPIRED\n" "$user" "$row" "$whois" >> "$file" 
        break 
      else 
        continue 
      fi 
     done 

     else 
      continue 
     fi 
done 

printf "\n" 
printf "Total: $(sed '1,2d' "$file" | wc -l) expired domains.\n" 

這是在/var/cpanel/users/*模樣文件如何樣:

DNS=stackoverflow.com 
+1

您應該添加'#!/ bin/bash -x'並嘗試獲取關於它究竟卡在哪裏的更多信息。 –

+0

@BarisDemiray我已經完成了'set -x',但沒有任何幫助。一切似乎都很好。 – krt

+1

如果您因爲WHOIS濫用而遭到鎮壓,我不會感到驚訝。 –

回答

0

謝謝伊格納西奧巴斯克斯 - 艾布拉姆斯爲指出WHOIS濫用。我通過在for loop上添加sleep 2來實現。現在它運作良好。