PHP 异步执行 shell 命令 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JKeita
V2EX    问与答

PHP 异步执行 shell 命令

  •  
  •   JKeita 2019-07-18 09:01:54 +08:00 4698 次点击
    这是一个创建于 2278 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    但 zip -qr $dirTmp/$filename.zip ./* 应该是阻塞了,你这后面加上&,后台运行
    cnqncom
        18
    cnqncom  
       2019-07-18 16:34:36 +08:00
    @v23x 你忘记这是全世界最好用的语言吗
    hetaoo
        19
    hetaoo  
       2019-09-05 19:19:26 +08:00
    楼主最后解决了吗?我也碰到一样的问题了
    JKeita
        20
    JKeita  
    OP
       2019-09-06 08:54:17 +08:00   1
    @hetaoo 最后是额外写个脚本文件去调用了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2786 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:27 PVG 22:27 LAX 07:27 JFK 10:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86