Usar cURL para recuperar IP público para configuração do tmux cria muitas conexões

Usar cURL para recuperar IP público para configuração do tmux cria muitas conexões

Atualmente estou usando o comando: curl icanhazip.come a opção set -g status-left ...em meu tmux.conf para recuperar e exibir meu IP público na barra de status.

Isso funciona muito bem, embora eu esteja realmente incomodado com onúmero de solicitaçõesque estão sendo feitos para recuperar o mesmo IPde novo e de novode novo.

Pergunta:

Como posso conseguir isso (recuperar/exibir IP público na barra de status do tmux) com apenas um fluxo de comunicação por sessão (ou algo menos redundante) usando a configuração do tmux?

Examinei a página de manual do curl e tentei vários argumentos de limitação de taxa no comando [sem sucesso], embora eu ache que isso é algo específico do tmux.

Eu poderia usar algum tipo de script ou função externa para fazer isso, embora eu queira manter isso simples.

Qualquer sugestão para resolver isso ou métodos alternativos seria ótima!

editar: formatação

Responder1

Armazene as informações em cache:

  1. Adicione um cron job que seja executado a cada 5 ou 10 minutos:

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

    Algumas fontes fornecem essas informações por meio de protocolos sem conexão e, portanto, não serão tão rígidas com seus limites quanto as fontes HTTP baseadas em conexão:

    dig +short myip.opendns.com @208.67.222.222 > ~/.cache/my-ip
    
  2. No tmux, altere o comando para simplesmente ler seu arquivo de cache:

    cat ~/.cache/my-ip
    

Isso também poderia ser feito por um único script, masseriaser muito menos simples:

#!/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";

informação relacionada