我的任务是确保如果工作中的某个特定服务器发生故障,我们会立即知道。因为我不在那里(实际上没有人),所以我编写了一个脚本在我的家庭路由器 linux 盒子(运行 Alpine Linux)上运行,以连接到我们的工作 Cisco 路由器并 ping 服务器(因为服务器不直接可通过互联网访问)。
我在 Cisco 路由器上设置了无密码 rsa,这是我的脚本的主要部分:
ssh user@work_router 'ping Server_IP' 2>/dev/null | grep -q ' 0 percent'
if [[ $? == 0 ]]
then
#It's not responding
else
#Everything is fine
fi
这些脚本在手动运行时工作得很好,但是当我告诉 cron 运行它时,它就停止工作了。将 ssh 输出重定向到日志文件,我发现这就是问题所在:
手动运行时,该命令会给出以下输出:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
当 cron 运行时,输出如下:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to SERVER_IP, timeout is 2 seconds:
!
是否有某种原因导致 ping 或 ssh 在完成运行之前被中断?
编辑:
使用“ssh -v -v”从终端运行脚本:
使用 'ssh -v -v' 使用 cron 运行脚本:
这两个文件之间的 vimdiff 显示了一些有趣的差异,但这超出了我的能力范围。谁能告诉我发生了什么事吗?