2013-03-06 142 views
0

我使用PHP,并建立了一些Windows的计划任务运行.BAT具有类似PHP和Windows计划任务

"C:\PHP\php.exe" "C:\inetpub\wwwroot\cron\run-me.php" 
在他们

文件。这些都很好,我已经设定每30分钟运行一次。在“运行me.php”文件包含脚本来检查记录的结束日期和到期他们,如果终止日期是低于现在(有脚本有更多的功能,如向用户发送电子邮件等)。再次,他们都很好。

因为脚本只运行,每30分钟我也想被当有访客在网站上执行的脚本,所以基本上每个页面加载,检查结束的物品,过期它们,继续加载保留所有记录最新。我在Windows任务中执行的原因是因为几小时内可能没有任何访问者,所以我需要过期记录并发送电子邮件。现在

,我有问题是,如果在Windows的任务运行和访问者重新加载页面,我遇到正在执行双重脚本,因为我经常收到内容相同的双电子邮件。

我的Windows任务只允许执行一个实例,它是如果它运行的时间超过5分钟停止力。

我的问题是:

  1. 我可以从我的PHP脚本,使相同的脚本只有一个实例正在执行执行Windows的计划任务?
  2. 我使用MySQL的数据库,我应该锁定该行因此没有别的可以对其执行任何操作,因此允许执行到记录第一次访问脚本?
+0

用羊群()文件 – 2013-03-06 21:43:39

回答

0

使用事务应该做的伎俩。不过,我建议你只能在cron(或Windows中的调度程序)中执行此操作,即使这意味着它每五分钟运行一次。

+0

嗨感谢您的建议。这是否意味着我删除了用户启动的脚本,并从调度程序运行过期检查?这也意味着有一个5分钟的窗口,可以在网站上查看过期的记录,除非我添加WHERE end_date> NOW或其他正确的记录?在不了解额外配置的情况下,会每隔2分钟运行一次脚本,开销过大? – puks1978 2013-03-07 00:20:34

+0

只要您不处理大量数据,就应该每两分钟运行一次。如果只看到几次失效,那应该没问题。此外,由于您过滤一次过期,所以您必须使用的记录总是有限的,所以应该没问题。 – xelber 2013-03-07 00:56:32

+0

谢谢。听起来像是要走的路。 – puks1978 2013-03-07 01:12:40