我正在运行一个带有树莓派的 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/