PHP 异步执行 shell 命令

2019 年 7 月 18 日
 JKeita

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

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

但 zip -qr $dirTmp/$filename.zip ./* 应该是阻塞了,你这后面加上&,后台运行
cnqncom
2019 年 7 月 18 日
@v23x 你忘记这是全世界最好用的语言吗
hetaoo
2019 年 9 月 5 日
楼主最后解决了吗?我也碰到一样的问题了
JKeita
2019 年 9 月 6 日
@hetaoo 最后是额外写个脚本文件去调用了

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

https://study.congcong.us/t/583985

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

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

© 2021 V2EX