使用 cURL 检索 tmux 配置的公共 IP 会创建过多连接

使用 cURL 检索 tmux 配置的公共 IP 会创建过多连接

我目前正在使用命令:和tmux.conf 中的 curl icanhazip.com选项来检索并在状态栏中显示我的公共 IP。set -g status-left ...

这很好,尽管我真的很困扰请求数正在检索相同的 IP一遍又一遍再次。

问题:

如何使用 tmux 配置每个会话仅使用一个通信流(或冗余程度较低的流)来实现此目的(在 tmux 状态栏中检索/显示公共 IP)?

我查看了 curl 的手册页,并在命令中尝试了各种速率限制参数 [但无济于事],但我认为这是 tmux 特有的。

尽管我想保持简单,但我可以使用某种外部脚本或函数来实现这一点。

任何能够解决这个问题或完全替代方法的建议都非常好!

编辑:格式化

答案1

缓存信息:

  1. 添加每 5 分钟或 10 分钟运行一次的 cron 作业:

    curl http://icanhazip.com > ~/.cache/my-ip
    

    一些来源通过无连接协议提供此信息,因此其限制不会像基于连接的 HTTP 来源那样严格:

    dig +short myip.opendns.com @208.67.222.222 > ~/.cache/my-ip
    
  2. 在 tmux 中,将命令更改为仅从缓存文件中读取:

    cat ~/.cache/my-ip
    

这也可以通过一个脚本来完成,但是没那么简单:

#!/usr/bin/env perl
use LWP::Simple;

sub read_cached_ip {
    my ($file) = @_;
    return undef if !-e $file; # check if file exists
    my $mtime = (stat $file)[9];
    return undef if time - $mtime >= 5*60; # check if file has expired
    if (open(my $fh, "<", $file)) {
        chomp(my $ip = <$fh>);
        close($ip);
        return $ip;
    }
    return undef;
}

sub update_ip {
    my ($file) = @_;
    my $ip = LWP::Simple::get("http://icanhazip.com");
    if (open(my $fh, ">", $file)) {
        print $fh "$ip\n";
        close($ip);
    }
    return $ip;
}

my $file = $ENV{HOME}."/.cache/my-ip";
my $ip = read_cached_ip($file) // update_ip($file);
print "$ip\n";

相关内容