0

我有一个邮件列表并定期向它发送信息。这个邮件列表已经长大了,现在它太大了,无法在商业时间发送它,因为打开了太多的连接并且服务器无法访问。所以我制作了一个 bash 脚本来在晚上(凌晨 4 点)调用一个 PHP 文件,检查是否有任何计划发送的时事通讯,如果有,发送它。
BASH 脚本

#!/bin/sh
senddate=$(date +"%Y-%m-%d")

url=https://www.my.url/check_to_send_maillist.php?date=$senddate\&autosend=1

wget -O /my/log/dest.log --http-user=myuser --http-password=mypass $url

PHP 脚本

$date=$_GET["date"];
if($date<>""){
$sql="select newsletters_id from " . TABLE_NEWSLETTERS . " where send_date='" . $fecha . "'";
$nid=executequery($sql);
if($nid<>""){
    $url="https://www.my.url/send_newsletter.php?page=1&nID=%s&action=confirm_send&autosend=1";
    $url=sprintf($url,$nid["newsletters_id"]);
    header('location:' .$url);
}   
}

测试没问题,我所做的一切都很好。当我将它与真正的邮件列表一起使用时,PHP 脚本向发送时事通讯的 URL 调用了 3 次,因此我的客户收到了 3 次时事通讯。我的邮件列表大约有 40,000 个地址(是的,我知道我应该使用外部服务)
Apache 日志
-BASH SCRIPT
server_ip - http_user [14/Dec/2012:04:00:02 +0100] "GET /check_to_send_maillist.php?date=2012-12-14&autosend=1 HTTP/1.0" 302 - "-" "Wget/1.10.2"
-PHP SCRIPT

 server_IP - http_user [14/Dec/2012:04:04:59 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 21454 "-" "Wget/1.10.2"
server_IP - http_user [14/Dec/2012:04:20:01 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 21454 "-" "Wget/1.10.2"
server_IP - http_user [14/Dec/2012:06:05:38 +0100] "GET /my_send_script.php?page=1&nID=nid&action=confirm_send&autosend=1 HTTP/1.0" 200 268 "-" "Wget/1.10.2"

为什么标头位置多次调用脚本?如何强制只打一个电话?有什么建议以不同的方式来做吗?

任何帮助将不胜感激

4

1 回答 1

0

在寻找问题的原因和/或解决方案之后,我找到了它。默认情况下,如果 WGET 超时,WGET 会尝试 20 次打开 URL。我的脚本发送电子邮件超时,因此 WGET 一次又一次地尝试。

我将 WGET 命令更改为

WGET -tries=1 -T 4 http://www.my.url/my/script.php

--tries=1 强制 WGET 只尝试一次以打开脚本,即使超时也是如此。
-T 4 设置超时时间为4秒

并且工作正常。

谢谢您的帮助。

于 2012-12-14T18:21:01.743 回答