以动态间隔运行PHP bot

以动态间隔运行PHP bot,php,cron,Php,Cron,我有一个PHPbot,它收集一些事件的数据。数据结构如下所示: // event one [Date] => 11.07.2019 [Start] => 12:30 [Name] => ... [State] => ... // event two [Date] => 11.07.2019 [Start] => 15:00 [Name] => ... [State] => ... 我每天在00:00运行一次,使用cron作业来收集开始时间。

我有一个
PHP
bot,它收集一些事件的数据。数据结构如下所示:

// event one
[Date] => 11.07.2019 
[Start] => 12:30
[Name] => ...
[State] => ...

// event two
[Date] => 11.07.2019 
[Start] => 15:00
[Name] => ...
[State] => ...
我每天在
00:00
运行一次,使用
cron作业来收集开始时间。在我有了那个开始时间(每个事件每天都不同)之后,我需要在事件开始时为每个事件运行另一个脚本

例如,对于
事件一
,我需要使bot在
12:30
运行,对于
事件二
15:00
运行

一旦每个事件的开始时间到了,有没有办法从php更改
cron作业

更新: 此外,我不能使用每分钟运行一次脚本的cron,因为有时刷新事件可能需要一段时间(有时甚至超过一分钟)——我有一个
do{}while()
循环,在bot运行一次后每10秒调用一次events server api,直到发布有关事件的数据


谢谢大家!

将进程合并到单个脚本中,使用cron每分钟运行一次该脚本。如果时间不是开始时间,则退出脚本,如果是,则让脚本运行并处理事件

// get your start time as normal
$starttime = my_starttime_check_function();
// compare it to now
if($starttime != date("H:i")){
    exit;
}
// if we get this far it must be the start time .. run the event process
my_event_process_function();

将进程合并到单个脚本中,使用cron每分钟运行一次该脚本。如果时间不是开始时间,则退出脚本,如果是,则让脚本运行并处理事件

// get your start time as normal
$starttime = my_starttime_check_function();
// compare it to now
if($starttime != date("H:i")){
    exit;
}
// if we get this far it must be the start time .. run the event process
my_event_process_function();

一种解决方案是在任何文件/数据库中写入下一次执行时间,并使cronjob每分钟运行一次。如果作业执行时间>=下一次执行时间,则运行代码并写入下一次执行时间。使用cron的唯一问题是,有时刷新事件需要一段时间。这意味着cron可能会在已经执行的脚本上运行,这可能会导致一个有趣的结果,然后您可以在数据库中进行一些控制,例如
scriptrunning
scriptend
。当下一个脚本开始运行时,您将同时检查时间和是否有另一个脚本正在运行。我不知道,但是您需要某种控制,以避免php脚本与cronjobs混淆。我认为您没有考虑到您的服务器可以毫无问题地运行脚本的多个实例。如果脚本中的某些逻辑在重叠事件上运行时会导致问题,那么无论如何都会导致问题。一种解决方案是在任何文件/数据库中写入下一次执行时间,并使cronjob每分钟运行一次。如果作业执行时间>=下一次执行时间,则运行代码并写入下一次执行时间。使用cron的唯一问题是,有时刷新事件需要一段时间。这意味着cron可能会在已经执行的脚本上运行,这可能会导致一个有趣的结果,然后您可以在数据库中进行一些控制,例如
scriptrunning
scriptend
。当下一个脚本开始运行时,您将同时检查时间和是否有另一个脚本正在运行。我不知道,但是您需要某种控制,以避免php脚本与cronjobs混淆。我认为您没有考虑到您的服务器可以毫无问题地运行脚本的多个实例。如果脚本中的某些逻辑在重叠事件上运行时会导致问题,则无论如何都会导致问题。不幸的是,有时刷新事件可能需要时间,这可能会导致脚本执行两次,从而导致奇怪的结果。。。我需要的东西将运行脚本在12:30,然后再次只有在15:30-我有一个
do{},而
循环在它不会有关系,脚本可以运行多次。例如,假设它在12:30触发,处理需要10分钟,12:35还有另一个事件,脚本将只运行自身的2个实例。您不必等待脚本结束后才能再次运行。除非在实际函数中有什么问题,否则你会遇到问题。我确实考虑过了,但是我试着避免这个问题,老实说,我试图避免Con Work的工作,因为我需要在一个特定的时间运行一个脚本的东西。我在考虑一个python脚本,它在事件发生前休眠到10秒,然后运行自己,然后更新自己直到下一个事件发生,但是如果重新启动,它会失败得很惨-不够可靠…cron是你最好的朋友,他诚实、努力工作,永远不会让你失望。:-)不幸的是,有时刷新事件可能需要时间,这可能会导致脚本执行两次,进而导致奇怪的结果。。。我需要的东西将运行脚本在12:30,然后再次只有在15:30-我有一个
do{},而
循环在它不会有关系,脚本可以运行多次。例如,假设它在12:30触发,处理需要10分钟,12:35还有另一个事件,脚本将只运行自身的2个实例。您不必等待脚本结束后才能再次运行。除非在实际函数中有什么问题,否则你会遇到问题。我确实考虑过了,但是我试着避免这个问题,老实说,我试图避免Con Work的工作,因为我需要在一个特定的时间运行一个脚本的东西。我在考虑一个python脚本,它在事件发生前休眠到10秒,然后运行自己,然后更新自己直到下一个事件发生,但是如果重新启动,它会失败得很惨-不够可靠…cron是你最好的朋友,他诚实、努力工作,永远不会让你失望。:-)