为什么我的bash脚本会挂起?

时间:2015-06-02 07:43:47

标签: bash shell

我正在开发一个bash脚本,如果它们已过期,将检查+1000个域名。我使用for循环迭代/var/cpanel/users/*中的所有用户。它适用于10个第一个用户(循环)然后它只是挂起。

奇怪的是,我可以使用Ctrl+Z停止脚本,然后使用fg再次启动脚本,并且对于大约+10个用户继续正常工作,但之后它会再次挂起。

这是我的头脑:

# 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 个答案:

答案 0 :(得分:0)

感谢Ignacio Vazquez-Abrams指出WHOIS滥用行为。我通过向long[]添加sleep 2来实现它。现在它很棒。