Cron选项卡未运行重新加载页面的javascript

Cron选项卡未运行重新加载页面的javascript,javascript,php,cron,Javascript,Php,Cron,我有一个php文件,它可以向我们的客户发送电子邮件,这些客户都期待它的出现,为了减轻服务器上的负载,消除它看起来像垃圾邮件服务器,我们将流量减少到每20秒40封电子邮件。这是通过使用javascript每20秒重新运行一次页面来完成的。页面本身从数据库中读取并获取接下来的40个电子邮件地址,发送它们,然后循环使用,直到全部发送。然后,在三周后的下一个周期中,从重复的表中重新加载电子邮件列表 下面是由cron作业启动时似乎不运行的javascript代码 <script language="

我有一个php文件,它可以向我们的客户发送电子邮件,这些客户都期待它的出现,为了减轻服务器上的负载,消除它看起来像垃圾邮件服务器,我们将流量减少到每20秒40封电子邮件。这是通过使用javascript每20秒重新运行一次页面来完成的。页面本身从数据库中读取并获取接下来的40个电子邮件地址,发送它们,然后循环使用,直到全部发送。然后,在三周后的下一个周期中,从重复的表中重新加载电子邮件列表

下面是由cron作业启动时似乎不运行的javascript代码

<script language="JavaScript" type="text/javascript">
            setTimeout("location.href = \'PT_enrollment.php?sendDate='.$sendDate.'\'",20000); // milliseconds, so 10 seconds = 10000ms
            </script>

setTimeout(“location.href=\'PT\u enrollment.php?sendDate='.$sendDate.\'”,20000);//毫秒,因此10秒=10000ms
当我从我的浏览器运行它时,它确实正确运行,所以我猜它在Cron作业功能中


我错过了什么?在crontab或服务器上是否有需要设置的设置或参数,以使其正确运行?

我不知道您是如何运行此功能的。。服务器将不会运行JavaScript 如果将JavaScript添加到文件test.php中 你可以像这样跑

file_get_contents('https://yourdomain.com/test.php');
这将像在浏览器上运行一样命中文件

或者在PHP语言上重写您的任务,如

$url = 'https://yourdomain.com/PT_enrollment.php?sendDate='.$sendDate;
file_get_contents($url);

您可以让PHP进程睡眠20秒:

$emails = // retrieve all emails from database
$done = 0;

foreach ($emails as $email) {
    // send email to $email

    $done++;
    if ($done % 40 == 0) { // every 40 emails
        sleep(20); // wait 20 seconds
    }
}

通常,cron作业通过phpcli在服务器端运行,默认情况下没有超时。一些托管提供商通过wget或curl实际检索URL来运行cron作业,在这种情况下,您必须考虑可能的超时。在这种情况下,您可以添加
set\u time\u limit(0)到您的脚本以解决此问题。

为什么cron选项卡不直接从数据库中提取?cron作业由服务器运行,而不是由浏览器运行。服务器不会执行PHP代码生成的javascript,它只会呈现它。由于输出通常不会发送到浏览器(除非您自己实际在浏览器中打开cron文件),因此javascript代码实际上会被忽略。感谢rickdenhaan回答了为什么现在我只需要知道如何在php中每隔20秒循环一次。我有一个3000多封电子邮件的列表,我处理,这样大约需要25分钟,这是完美的事情,感谢重新提交这作为一个答案,我会接受它作为正确的,所以你得到信用的问题是,我需要重复这个过程每20秒。它正在向3000多人发送电子邮件,所以我每20秒将其分成40组,这样它将循环75次。运行40次大约需要5秒,然后等待15次,然后重复)。不好的方法是将其放入一个循环中,该循环持续迭代,但如果时间是20秒,则只处理特定的例程。重置时间保持器,但这确实会使服务器负担过重。感谢我修改代码,将延迟合并到睡眠函数中,而不是javascript中