【发布时间】:2014-09-08 06:14:42
【问题描述】:
我有一个看起来像这样的 cron 任务:
00 12 * * 1 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 1 /usr/bin/php /path/to/php/script/cron_job.php
00 12 * * 2 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 2 /usr/bin/php /path/to/php/script/cron_job.php
00 12 * * 3 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 3 /usr/bin/php /path/to/php/script/cron_job.php
00 12 * * 4 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 4 /usr/bin/php /path/to/php/script/cron_job.php
00 12 * * 5 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 5 /usr/bin/php /path/to/php/script/cron_job.php
00 12 * * 6 /usr/bin/php /path/to/php/script/cron_job.php
45 20 * * 6 /usr/bin/php /path/to/php/script/cron_job.php
该文件中的 php 代码如下所示:
$employeesArray = array(
'employee1@company.com',
'employee2@company.com',
'employee3@company.com'
);
if (date('A', time()) == 'AM')
{
foreach($employeesArray as $employee)
{
echo $employee.' - AM';
$mail->
addTo($employee)->
setFrom('email@domain.com')->
setHtml('Dont forget to Log In.');
$result = $sendgrid->smtp->send($mail);
echo ' -> '.$result.'<br />';
}
}
else
{
foreach($employeesArray as $employee)
{
echo $employee.' - PM';
$mail->
addTo($employee)->
setFrom('email@domain.com')->
setHtml('Dont forget to Log Out.');
$result = $sendgrid->smtp->send($mail);
echo ' -> '.$result.'<br />';
}
}
此脚本用于在所有员工开始工作前和轮班结束前的第一时间向所有员工发送消息;仅在周一至周五。电子邮件即将发出,但 Employee1 和 Employee2 收到了 4 份邮件,而 Employee3 收到了 7 份。当我通过导航到 Web 浏览器中的页面“cron_job.pnp”手动运行脚本时,它只向每个发送一次,所以我假设这是我的 cron 作业多次触发的问题。
提前感谢您的帮助。
【问题讨论】:
-
旁注:您可以在第 1 天到第 6 天使用
00 12 * * 1-6定义00 12。 -
@fedorqui 谢谢,这很方便。
-
消息是同一消息的多个副本,还是它们实际上是单独的消息?查看消息 id 标头可能会告诉您,因为时间戳很可能是相同的。如果是前者,则更可能是您的邮件服务器而不是 cron 问题。
-
@Synchro 你是对的,我使用外部 SMTP 服务器作为中继,他们说有一个 API 建议避免他们在使用 mail() 函数时遇到的问题。现在效果很好。
标签: php cron crontab phpmailer