我有一台 CentOS 7 机器,它不断地将数据复制到 AWS/S3。
但是,它有一个问题,我将不胜感激有关如何调试的建议。
到 S3 的复制将持续数小时/数天,然后网络将停止运行(我有一项cron
工作每分钟记录一次对网络的 ping 操作,以及 S3 命令aws s3 cp
,所以我知道它发生的确切时间)。
在那个阶段,NetworkManager
守护进程看起来很好,syslog
并且journalctl -xe
没有显示任何异常,但使网络再次运行的唯一方法是重新启动。
当网络停止正常运行时,该计算机上没有任何用户有任何计划的 (crontab) 作业,该计算机具有静态 IP,并且直到出现问题时,计算机和网络功能都没有问题。
关于如何调试这个问题有什么想法吗?
编辑1:
根据 Artem Tashkinov 的建议,我向 crontab 添加了每分钟一次的调用,该脚本执行以下操作:
#!/bin/bash -xv
ping -c1 1.1.1.1 >/dev/null 2>&1
if [ $? -eq 0 ];
then
echo Successful
else
echo Fail
systemctl stop NetworkManager
rmmod r8169
modprobe r8169
systemctl start NetworkManager
fi
我会看看它是否能够在网络崩溃时恢复网络。
编辑2:
即使有了脚本,网络出现故障时也没有恢复。
不过,我增强了脚本,因为我添加了外部网卡,看看它是否能解决问题。
#!/bin/bash -xv
#
#kernel_module="r8169" # on-board NIC
#kernel_module="e1000e" # add-on NIC
nic=$( ifconfig | grep -B1 10.60.100 | head -1 | awk -F: '{ print $1 }' )
kernel_module=$( ethtool -i $nic | grep driver | awk '{ print $NF }' )
ping -c1 1.1.1.1 >/dev/null 2>&1
if [ $? -eq 0 ];
#if [ $? -ne 0 ];
then
echo Successful
else
echo Fail
systemctl stop NetworkManager
rmmod $kernel_module
modprobe $kernel_module
systemctl start NetworkManager
fi
答案1
但使网络再次正常工作的唯一方法是重新启动
我以前也有过这样的服务器。
我所做的就是在 crontab 中添加一个任务来 ping 一个已知的 IP 地址。如果无法访问,则关闭网络,删除负责 NIC 的内核模块 ( rmmod module_name
) 并重新插入 ( modprobe module_name
),最后再次启动网络。请尝试一下。
如果它对你有用,你绝对应该报告错误。