首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cron是在php中编写基于提醒的应用程序的最佳方式吗?

cron是在php中编写基于提醒的应用程序的最佳方式吗?
EN

Stack Overflow用户
提问于 2018-02-18 19:55:48
回答 2查看 1.2K关注 0票数 4

假设我有这样一个数据库。

代码语言:javascript
复制
| task                      |  time                     | 
|---------------------------|---------------------------| 
| Remind me to water plants |  2018-02-18T19:32:10.486Z | 
| English Test              |  2018-10-8T09:30:00.000Z  | 
| Math Test                 |  2018-10-8T10:30:00.000Z  | 

我希望在用户请求(或可能在此之前一小时)时向用户发送提醒通知,并在触发提醒通知的特定时间执行其他代码块。

我想写一份像这样的工作

* * * * * php /laravel-project/artisan schedule:run >> /dev/null 2>&1

正如laravel (https://laravel.com/docs/5.6/scheduling)中所提到的。

在该脚本中,我将在下个小时内循环到当前时间提醒和提醒,并执行操作。

这是一个很好的练习吗?它不会增加PHP和数据库之间的通信量吗?如果我在同一小时内有很多提醒,循环进入并执行代码提示块会是个好主意吗?

请提出建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-18 20:02:07

使用任务调度器是正确的方法。如果您有大量的提醒要处理,那么将它们设置为执行排队作业是推荐的方法。这样,服务器上的负载就最小化了,并且不会限制系统的用户流量。

您可能希望创建一个控制台命令来处理处理逻辑和创建作业。块状作业也会有帮助,因为这会错开给定批处理的作业数量。

票数 4
EN

Stack Overflow用户

发布于 2018-02-18 20:22:47

很久以前,对于短信(文本)消息系统,我有同样的问题,我选择在cron使用我自己的cron脚本计划。在我的PHP脚本中,我阻止浏览器调用它,我在下面的shell脚本中添加了我想要多少PHP服务。为了确保一切安全,每个PHP服务都需要一个小令牌才能运行,因此,只有在访问源代码时才会注意到。

代码语言:javascript
复制
#!/bin/sh
#
# (c) 2016 por Marcello Fontolan
#
PATH=$PATH:/sbin:/usr/sbin
export PATH
LOCKFILE=/tmp/${0##*/}.lock

if [ ! -e $LOCKFILE ]
then
        touch $LOCKFILE
        cd ${0%/*}
        php movimentocopia.php token
        php pedidocopia.php token
        rm $LOCKFILE -f
else
        echo lock file detected.
fi
exit

此时此刻,我处理另一个问题。提供程序连接和响应时间减慢了文本消息的数量,因此我创建了一个PID排队Spool。

就像这样:

代码语言:javascript
复制
function execThis($c, $m) {
    $cmd = "nohup nice -n 10 /usr/bin/php -f execenvio.php {$c} {$m} >> /tmp/execenvio.log 2>&1 & echo $!";
    return intval(shell_exec($cmd));
}

while (count($pid) > NUMTASKS) {
    foreach ($pid as $kpid => $vpid) {
        $processState = NULL;
        exec('ps ' . $vpid, $processState);
        if (count($processState) < 2)
            unset($pid[$kpid]);
    }
}
$pid[] = execThis($vcliente->id, $vmensagem->id);

嗯,上面的代码是我当前系统的一部分,所以你只需要弄清楚如何适应你的需求。

问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48855952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档