假设我有这样一个数据库。
| 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和数据库之间的通信量吗?如果我在同一小时内有很多提醒,循环进入并执行代码提示块会是个好主意吗?
请提出建议
发布于 2018-02-18 20:02:07
发布于 2018-02-18 20:22:47
很久以前,对于短信(文本)消息系统,我有同样的问题,我选择在cron使用我自己的cron脚本计划。在我的PHP脚本中,我阻止浏览器调用它,我在下面的shell脚本中添加了我想要多少PHP服务。为了确保一切安全,每个PHP服务都需要一个小令牌才能运行,因此,只有在访问源代码时才会注意到。
#!/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。
就像这样:
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);嗯,上面的代码是我当前系统的一部分,所以你只需要弄清楚如何适应你的需求。
问候
https://stackoverflow.com/questions/48855952
复制相似问题