我有一个 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/