如何创建一个脚本来检查ssh是否正在运行,如果没有重新启动它

时间:2016-01-25 01:16:10

标签: linux bash ssh raspbian raspberry-pi2

我正在运行带有覆盆子pi的无头系统,一段时间没有通过ssh连接,系统将停止响应ssh,这不是Wi-Fi加密狗睡着了,我检查过,看到我有一个piglow运行piglow-sysmon,当pi停止响应ssh时,监视网络活动的pi发光部分确实显示活动。我发现了一个很好的脚本,用于检查Wi-Fi是否已启动,如果没有重新启动它,虽然我对bash脚本不是很好,并且无法弄清楚我是如何使用ssh而不是Wi-Fi来修改它,如果任何人都可以帮我修改它,或提供一个小的快速的,我每隔几分钟就用cron来运行它(一旦我可以修改它)

这里是我尝试修改

的脚本
#!/bin/bash

LOGFILE=/home/pi/network-monitor.log

if ifconfig wlan0 | grep -q "inet addr:" ;
then
        echo "$(date "+%m %d %Y %T") : Wifi OK" >> $LOGFILE
else
        echo "$(date "+%m %d %Y %T") : Wifi connection down! Attempting reconnection." >> $LOGFILE
        ifup --force wlan0
        OUT=$? #save exit status of last command to decide what to do next
        if [ $OUT -eq 0 ] ; then
                STATE=$(ifconfig wlan0 | grep "inet addr:")
                echo "$(date "+%m %d %Y %T") : Network connection reset. Current state is" $STATE >> $LOGFILE
        else
                echo "$(date "+%m %d %Y %T") : Failed to reset wifi connection" >> $LOGFILE
        fi
fi

1 个答案:

答案 0 :(得分:0)

尝试以下脚本。它做了一些假设:

1)您的帐户在authorized_keys文件中有自己的ssh密钥,因此“ssh localhost”基本上只为您提供另一个shell,而不提示输入密码

2)如果ssh命令在三秒内没有完成,那么可以安全地假设ssh守护程序已启动,但由于某种原因而停滞:

#! /bin/bash

ssh localhost /bin/true &

sleep 3; kill -9 $!

if wait $!
then
    echo Up
else
    echo Down
fi
有点粗糙,但应该有效。您可以在此处了解如何以最佳方式重新启动ssh服务。填写空白。

您可能还想放弃所有标准错误,因为它可能会产生一些不重要的噪音......

另一方面,如果此脚本报告ssh服务正在运行,但您仍然无法从外部连接,则问题不在于ssh服务,而是在其他地方,所以它又回到了绘图董事会为你。