开发的时候经常会遇到要执行的文件运行时间很长的问题。
这时,我们可以把要执行的文件放到后台调起慢慢执行。又可以先进行手头的其他事情。又要是用万能的虚拟机啦~~~~~
①新建2.php文件
<?php $isDev = 'real'; if ($argc >= 2) { if ($argv[1] == 'dev') { $isDev = 'dev'; define('ENV', 2); } } $uid = isset($argv[2]) ? intval($argv[2]): 0; echo "{$uid} \n"; $i=1; while(1) { if($i > 50) { break; } $num = $i++; echo $num."\n"; sleep(5); }
②新建1.php,调用执行2.php文件
<?php $cmd = 'nohup /usr/local/php/bin/php '.'/usr/local/nginx/html/www.ck.com/2.php dev uid >> /usr/local/nginx/html/www.ck.com/test.log 2>&1 &'; exec($cmd);
③调起执行有三种方式。
第一种--exec():命令行模式下 执行1.php文件(后台调起执行2.php),然后从新打开一个命令行窗口,查看执行日志
exec()----执行一个外部程序
相关函数:shell_exec()、system、passthru 参数、返回值用法、表现形式不一样
[root@bogon www.ck.com]# php 1.php [root@bogon www.ck.com]# tail -f test.log 0 1 2
第二种--命令行模式:不新建1.php文件,直接在命令行模式下,后台调起执行2.php文件
[root@bogon www.ck.com]# nohup /usr/local/php/bin/php 2.php dev uid >> /usr/local/nginx/html/www.ck.com/test.log 2>&1 &
查看执行文件的进程号:ps -aux | grep 2.php
[root@bogon ~]# ps -aux | grep 2.php root 4047 0.0 0.9 247540 9604 pts/0 S 16:18 0:00 /usr/local/php7/bin/php 2.php dev uid root 4105 0.0 0.0 112676 992 pts/2 S+ 16:19 0:00 grep --color=auto 2.php
第三种--反引号:php在linux中执行外部命令(反引号的使用),新建test.php文件
<?php $a = `nohup /usr/local/php/bin/php 2.php dev uid >> /usr/local/nginx/html/www.ck.com/test.log 2>&1 &`;
[root@bogon www.ck.com]# php test.php [root@bogon www.ck.com]# nohup: 重定向标准错误到标准输出
扩展:命令行执行php文件,下载图片 ①新建 test.php <?php $command = `curl -s 'https://cksite.cn/Upload/image/ueditor/20180122/1516589726849116.png'`; $command = trim($command); var_dump($command); file_put_contents('1516589726849116.png',$command); ②[root@bogon www.ck.com]# php test.php 执行该文件,即可下载图片到本目录
扩展: linux > 和 >> 、< 区别
>>和>都属于输出重定向,<属于输入重du定向。
大于号:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)
小于号:命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入
>> 是追加内容
> 是覆盖原有内容
相关资料:
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn