cURL을 사용하여 tmux 구성에 대한 공개 IP를 검색하면 연결이 너무 많이 생성됨

cURL을 사용하여 tmux 구성에 대한 공개 IP를 검색하면 연결이 너무 많이 생성됨

현재 상태 표시줄에 내 공용 IP를 검색하고 표시하기 위해 tmux.conf의 명령 curl icanhazip.com과 옵션을 사용하고 있습니다.set -g status-left ...

정말 효과가 좋지만,요청 수동일한 IP를 검색하기 위해 만들어지고 있는계속해서다시.

질문:

tmux 구성을 사용하여 세션당 단 하나의 통신 스트림(또는 덜 중복되는 스트림)으로 이를 달성하려면 어떻게 해야 합니까(tmux 상태 표시줄에서 공개 IP 검색/표시)?

나는 컬의 매뉴얼 페이지를 살펴보고 명령에서 [소용이 없는] 다양한 속도 제한 인수를 시도했지만 이것이 tmux에만 해당되는 것이라고 생각합니다.

이 작업을 단순하게 유지하고 싶지만 외부 스크립트나 일종의 함수를 사용하여 이를 수행할 수 있습니다.

이 문제를 해결하기 위한 제안이나 대체 방법을 완전히 제안해 주시면 감사하겠습니다!

편집: 서식 지정

답변1

정보를 캐시합니다.

  1. 5분 또는 10분마다 실행되는 크론 작업을 추가합니다.

    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";

관련 정보