最近遇到一个问题,客户会同时轮询修改上百条数据,并发性又很高,但又不是很频繁地使用,于是写了一个悲观锁,使用队列在后台异步处理,使用exec主动触发任务。
public function lock_test(){
(new \core\Approval())->task(); //悲观锁
}
1.这里使用exec主动触发任务;也可以使用system调用sh脚本,脚本中也要将返回写入日志,否则无法异步处理。
public function task(){
//system('/var/www/html/erp/public/lock_test.sh &');//执行脚本
exec('php index.php index/index/lock_test >> ../runtime/log/lock_error.log 2>&1 &');
}
2.代码编写完,浏览器打开task,shell没有运行,多次测试,是因为php-fpm运行用户没有权限导致。
echo shell_exec('whoami'); //运行用户
我这里显示的是apache,这个用户名可以去php-fpm配置文件中找。
vim /etc/php-fpm.d/www.conf
3.给文件赋予apache的运行权限,项目用的TP框架,直接给整个框架赋予权限。
chown -R apache:apache erp/
4.运行task,成功