首页 文章

Bash逻辑检查 - 使用嵌套的“IF Then”语句重复While循环

提问于
浏览 963
0

我正在编写一个脚本来监控我的sip trunk并尝试修复它 . 如果它无法解决问题6次,则重新启动服务器 . 该脚本由cron通过 @reboot 调用 . 我首先嵌套了 While Loops 但是没有正常工作所以我切换到一个永无止境的 While Loop ,其中有两个嵌套的 If Loops 来执行脚本的功能 .

我想知道是否有人可以快速查看,看看我攻击它的方式是否有道理并且是合乎逻辑的方法 .

谢谢,

脚本现状:

#!/bin/bash

pwd="/srv/scripts"
count=0
echo "Script Started on $(date -u) Failure.Count=$count" >> "$pwd/failures.count"

start=start
while [ $start = "start" ]; do

sleep 420

var="$(asterisk -rx "pjsip show registrations" | grep -o Registered)"

    if [ "$var" != "Registered" ]; then
        amportal restart
        count=$(( $count + 1 ))
        echo "Trunk Failure on $(date -u) Failure.Count=$count" >> "$pwd/failures.count"
    fi

    if [ "$count" -gt 5 ]; then  
        echo "Server Reboot due to Failure.Count=$count on $(date -u)" >> "$pwd/reboot.notification"  
        reboot    
    fi
done

1 回答

  • 0

    无需在 while 循环中使用变量,也无需将 grep 输出捕获到变量中 .

    #!/bin/bash
    
    pwd="/srv/scripts"
    count=0
    echo "Script Started on $(date -u) Failure.Count=$count" >> "$pwd/failures.count"
    
    # No need for a variable here
    while true; do
        # Fix indentation
        sleep 420
    
        # Again, no need for a variable; use grep -q
        if ! asterisk -rx "pjsip show registrations" | grep -q Registered
        then
            amportal restart
            count=$(( $count + 1 ))
            echo "Trunk Failure on $(date -u) Failure.Count=$count" >> "$pwd/failures.count"
        fi
    
        if [ "$count" -gt 5 ]; then  
            echo "Server Reboot due to Failure.Count=$count on $(date -u)" >> "$pwd/reboot.notification"  
            reboot    
        fi
    done
    

    我也许也会在一个日志文件中收集所有日志通知,并使用带有时间戳的更传统的日志格式,并且每个消息都使用脚本的名称 .

    如果您看到成功,计数器是否应重置为零?由于您在错误的时间断开网络电缆而重新启动服务器似乎是您想要避免的 .

相关问题