解决php的exec()不执行shell命令的问题

最近遇到一个问题,客户会同时轮询修改上百条数据,并发性又很高,但又不是很频繁地使用,于是写了一个悲观锁,使用队列在后台异步处理,使用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,成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值