如何:仅在网络(互联网连接)空闲时继续运行脚本?

如何:仅在网络(互联网连接)空闲时继续运行脚本?

我有一个脚本(实际上是一个带有 Sidekiq 作业队列系统的 Rails 应用程序),用于将图片和相册上传到 Flickr。对于我而言,这些数据非常庞大(大约 100GB),而且由于我的网速较慢,上传速度很慢。

我已经配置好了在 Ubuntu 启动时运行的脚本,并且有init.d用于控制该脚本的界面。

现在,由于上传消耗了我的所有带宽,我只想在互联网连接空闲时运行此脚本,即当互联网连接被其他应用程序使用时脚本应自动暂停,并在互联网连接再次空闲时恢复。

因此,我想知道是否有办法监控我的互联网连接并检查是否有其他应用程序在线连接。如果是,脚本会自动暂停,并在连接再次空闲时恢复。

对此方面的任何指点或帮助都将不胜感激。

答案1

您可以使用 /proc/net/dev 来监视网络活动,如下所示:

packets() {
    # Get the number of packets of eth0 device
    cat /proc/net/dev | grep eth0 | cut -f5 -d' ';
}

LAST=$(packets)

while [ true ]; do
    sleep 1;
    PACKS=$(packets)
    DIFF=$(($PACKS-$LAST));
    # I consider idle less than 10 packets per second
    if [ $DIFF -le 10 ]; then
        echo 'Idle!';
    fi
    LAST=$PACKS;
done

这里的诀窍在于你认为什么是空闲的,因为零流量在现实世界中是不可能的:)

相关内容