php - 每天 24 小时每小时发送 15 次消息

标签 php algorithm cron scheduled-tasks

我有一个 CRON 作业,它每小时启动一次并发送消息。如果它每小时启动一次,那么它一天发送 24 次消息。用户可以设置不同的 CRON 作业启动次数 - 如果他选择 12 次,则 cron 作业将按照以下模式每隔奇数(或偶数)小时运行一次:

  • 10101010...等

其中 1 是工作的小时数,0 是空闲时间。问题是我不知道如何让一个程序在所有其他时间自动锻炼这种模式,比如 15 或 17 或其他。对于这样的用户输入,模式将是:

  • 110110110...等

最后几个小时坏了(大概是 111 或 100)。我试图将 15 除以 24,加 1,然后将它与自上次发送以来的小时数进行比较(如果 1<1.5 则不发送,2>1.5 则发送)但我每次都以 101010 模式结束。不幸的是,我不能每分钟都运行 CRON,它仅每小时启动一次。谢谢。

最佳答案

根据您尝试执行的操作,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

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

关于php - 每天 24 小时每小时发送 15 次消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665629/

相关文章:

php - 更改自定义帖子类型的 WP 管理员帖子状态过滤器

PHP如何执行传递cookie的http请求并将结果保存到字符串

algorithm - 从 'n' 不同数字的组合中生成一个唯一数字?

java - crontab quartz 时间表

java - Cron 无法使用分钟

docker - 部署后如何让cron作业一次拉docker镜像?

javascript - 如何使用ajax将此变量传递到其他.php文件

php - php 中格式错误的 unicode/十六进制

确定一组中的最低付款的算法

algorithm - 证明算法在确定位串中 1 位数方面的正确性