PHP 异步执行 shell 命令

2019-07-18 09:01:54 +08:00
 JKeita

exec("nohup $[cd $basePath && zip -qr $dirTmp/$filename.zip ./*] > /dev/null 2>&1 &"); //压缩文件 命令如上,但是发现并没有异步执行,有没有什么办法可解决,最好不是另写一个 shell 脚本。

4174 次点击
所在节点    问与答
20 条回复
emeab
2019-07-18 09:23:28 +08:00
shell_exec
JKeita
2019-07-18 09:27:26 +08:00
@emeab 试过了没用
leoleoasd
2019-07-18 09:29:07 +08:00
popen?
JKeita
2019-07-18 09:32:58 +08:00
@leoleoasd 这个都直接不执行了。
haiyan
2019-07-18 09:34:07 +08:00
换一个思路,建一个专门处理执行 shell 的 php,在你的 php 去 curl 这个执行命令的 php,设置超时一秒
hteen
2019-07-18 09:42:36 +08:00
JKeita
2019-07-18 09:47:18 +08:00
@hteen 还是没有效果
linxl
2019-07-18 10:08:01 +08:00
没 log 吗, 你把 > /dev/null 改成输出到某个文件看看?
JKeita
2019-07-18 10:09:59 +08:00
@linxl 用 bash 上可以,但是 php 执行就不能异步,不懂为什么
linxiaojialin
2019-07-18 10:12:31 +08:00
是 CGI 还是 CLI 呢?
nohup 只是忽略 SIGHUP 信号,挂起在后台执行,不是异步执行,仍在当前线程( CGI )/进程( CLI )内。
很多种思路,例如,1.PHP-CLI 下可开启新的线程 /进程去处理; 2.启动一个 PHP-CLI 进程专门负责监听,其他进程 /CGI 线程中需异步执行的丢到监听进程中。
emeab
2019-07-18 10:31:47 +08:00
不行就用 go 写个 rpc 服务 php 去调用
AngryPanda
2019-07-18 13:03:15 +08:00
setsid 了解一下
tailf
2019-07-18 13:30:39 +08:00
PHP 本身是同步的,想支持异步需要专门实现,例如 curl 可以实现多个请求并发,或者使用 swoole。
whahuzhihao
2019-07-18 13:58:37 +08:00
pclose(popen('命令', 'r'));
标准做法不是 popen 去处理吗
v23x
2019-07-18 15:42:10 +08:00
php 搞异步 劝你换一个语言....
AlanAlbert
2019-07-18 16:04:26 +08:00
创建守护进程?
iyaozhen
2019-07-18 16:17:09 +08:00
不了解$[]语法干啥的。

但 zip -qr $dirTmp/$filename.zip ./* 应该是阻塞了,你这后面加上&,后台运行
cnqncom
2019-07-18 16:34:36 +08:00
@v23x 你忘记这是全世界最好用的语言吗
hetaoo
2019-09-05 19:19:26 +08:00
楼主最后解决了吗?我也碰到一样的问题了
JKeita
2019-09-06 08:54:17 +08:00
@hetaoo 最后是额外写个脚本文件去调用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX