我正在使用 PHP 并设置了一些 Windows 计划任务来运行 .bat 文件,这些文件类似于
"C:\PHP\php.exe" "C:\inetpub\wwwroot\cron\run-me.php"
在他们中。这些都很好用,我已将任务设置为每 30 分钟运行一次。“run-me.php”文件包含检查记录结束日期的脚本,如果结束日期小于现在,则将其过期(脚本中有更多功能,例如发送电子邮件等)。同样,它们都工作得很好。
因为该脚本仅每 30 分钟运行一次,所以我还希望在网站上有访问者时执行该脚本,所以基本上在每个页面加载时,检查结束项目,使它们过期,继续加载以保持所有记录是最新的。我在 windows 任务中执行的原因是因为几个小时内可能没有任何访问者,所以我需要使记录过期并发送电子邮件。
现在,我遇到的问题是,如果 Windows 任务正在运行并且访问者重新加载页面,我会遇到双重脚本正在执行,因为我经常收到具有相同内容的双重电子邮件。
我的 Windows 任务只允许执行单个实例,如果运行时间超过 5 分钟,它会被强制停止。
我的问题是:
- 我可以从我的 PHP 脚本执行 Windows 计划任务,以便只执行同一脚本的一个实例吗?
- 我正在为数据库使用 MySQL,我是否应该锁定该行以便没有其他东西可以对其执行任何操作,从而允许执行第一次访问记录的脚本?