wget脚本连接,等待成功,如果没有连接则继续

时间:2016-01-13 20:02:36

标签: bash perl wget

我必须创建一个脚本,将wget联系人消息发送到我们网络上的所有设备。 wget连接到url,这会触发端点与服务器联系。

我遇到的问题是我需要能够将命令发送到网络上的每个IP地址,如果连接成功,请注意30秒,然后转到列表中的下一个URL。但是,如果连接不成功,我希望脚本继续移动到下一个URL而不会暂停。

目前我正在使用bash脚本发送命令,其中url为暂停= 30,连接尝试设置为1,超时设置为1.这对于成功的连接是正常的,但它也是挂在不是的地址上。

有关如何暂停成功并在死亡地址之后继续前进的任何建议吗?

这是我目前正在运行的命令,

wget --connect-timeout = 1 --tries = 1 http://xx.xx.xx.xx:8085/contact_dls.html/ContactDLS
睡30年 wget --connect-timeout = 1 --tries = 1 http://xx.xx.xx.xx:8085/contact_dls.html/ContactDLS
等等等

感谢

2 个答案:

答案 0 :(得分:1)

您不需要执行此任务 - 一切都可以在Perl中完成。

只需使用以下代码:

use LWP::UserAgent;
use HTTP::Request;

my $ua = new LWP::UserAgent;
$ua->timeout(1);
my $req = new HTTP::Request(GET => $url);
my $res = $ua->request($req);
if ($res->is_success()) {
    print("Connection to '$url' was OK");
    sleep(30);
} else {
    print("Cannot access '$url'");
    sleep(1);
}

这会打到你的网址,但会在1秒后超时。

答案 1 :(得分:-1)

我可能会将urls加载到数组中并遍历数组。像这样的东西

#!/usr/bin/perl

use warnings;
use strict;

my @urls = qw(test.com url.com 123abc.com fail.aa);

foreach my $url (@urls){
    my $check = `wget --server-response $url 2>&1 | grep HTTP/ | awk '{print \$2}'`;
    #if there is a successful response you can set the sleep(3) to sleep(30) for your instance.
    if($check){
        print "Found $url -- sleeping 3 seconds\n";
        sleep(3);
    }
    else{
        print "$url does not exist\n";
        #If the url does not exist or respond it will move on to the next item in the array.  You could add a sleep(1) before the next for a 1 second pause
        next;
    }
}

当然这是假设你使用的是linux。网址也可以用另一种方式加载,我不知道你当前的脚本是如何得到它们的。以上是一个例子,你当然需要调整以适应你的环境