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

标签 linux bash ssh raspbian raspberry-pi2

我正在运行一个带有树莓派的 headless 系统,一段时间后没有通过 ssh 连接,系统将停止响应 ssh,这不是 Wi-Fi 加密狗睡着了,我已经检查过,看到我有一个piglow 运行 piglow-sysmon,当 pi 停止响应 ssh 时,监控网络事件的 pi glow 部分确实显示事件。我找到了一个很好的脚本来检查 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) 您的帐户在 authorized_keys 文件中有自己的 ssh key ,因此“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服务,而是在其他地方,所以回到绘图为你登机。

关于linux - 如何创建一个脚本来检查 ssh 是否正在运行,如果没有则重新启动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34983708/

相关文章:

bash - 使用 Perl 仅替换文件的某一行中的字符串

php - 使用 php exec 启动带有大括号扩展的 linux 命令

linux - 监视多个目录以创建文件;如果它们不存在,请发送电子邮件

npm - gitlab-ci:使用不同的 ssh key 将多个 gitlab 存储库安装为 npm 模块

Docker SSH 转发 - 绑定(bind) : Address not available

c - 将 "*()"作为参数传递给 bash 中的程序

Android:如何知道为我的设备加载的驱动程序

linux - 使用 pgadmin 4 在 linux 的 postgresql 中导入 shapefile

c++ - 通过 read 函数而不是 fread 读取标准输出

c# - 使用 ASP.NET 的 Web 应用程序中的 SSH 终端