每小时24小时发送15次消息

时间:2016-06-06 19:43:47

标签: php algorithm cron scheduled-tasks

我有一个CRON作业,每小时开始并发送消息。如果它每小时开始一次,它每天发送24次消息。用户可以设置CRON作业可以开始的不同次数 - 如果他选择12次,则cron作业将按以下模式每隔奇(或甚至)小时工作:

  • 10101010 ... etc

其中1表示小时工作,0表示空闲时间。问题是我不知道如何使节目锻炼这样的模式自动所有其他时间,比如15或17或其他东西。对于此类用户输入,模式将为:

  • 110110110 ...等

最后几小时被打破(这将是111或100)。我试图将15除以24,加1,然后将其与自上次发送后的小时数进行比较(如果1​​ <1.5然后不发送,2> 1.5然后发送)但我每次都以101010模式结束。不幸的是,我不能每分钟运行CRON,它只在每小时开始。谢谢。

2 个答案:

答案 0 :(得分:2)

根据您的尝试,cron作业运行的频率越高,您的时间就越准确。如果它每小时都有,那么用户在17到24之间选择的任何东西都会每小时执行一次。因此,即使提供所有这些选项也没有意义。如果您必须让用户选择一个数字并在一天中均匀执行,那么您必须比一小时更频繁地运行cron作业。

此示例假定您每分钟运行一次cron作业,即:

*/1 * * * * <your command>

// How many times per day, get from DB
$userInput = 17;

$SecondsPerDay = 60 * 60 * 24;

$Frequency = (int) ($SecondsPerDay / $userInput) -1;

$midnight = strtotime('today midnight');

// Get an array of times to execute
$executeTimes = array();
for($time=$midnight; $time<=($midnight+$SecondsPerDay); $time+=$Frequency)
    $executeTimes[] = date("g:i a", $time);

$currentTime = date("g:i a");
$execute = in_array($currentTime, $executeTimes);

if(!$execute) exit;

// Cron job codes here

这是一个例子:https://3v4l.org/0PCXh

注意:我认为这是一个错误的错误,但你应该从中获得要点..

答案 1 :(得分:0)

假设你想要的只是制作一个0和1的模式,用户选择1应该出现的频率并且它们是均匀间隔的......

你想要24个总数字。假设$n是事件之间的小时数。所以,$n=1表示每1小时一次。然后,每当小时可以被事件之间的小时数整除时,只需使用1 ......

$pattern = '';
for($h=1; $h<=24; $h++)
  $pattern.= ($h%$n==0) 1 : 0;

如果$ n = 1(每小时),这将给你111111111111111111111111。它将是0101010101 ...如果$ n = 2。如果$ n = 3等,它将是001001001001 ......

相关问题