supervisor php cli,php cli模式

php cli模式

本来我的小爬虫在apache环境下set_time_limit(0) 就可以24小时不断爬,最近部署到nginx环境下就不灵了,各种504 timeout。所以干脆cli模式走起吧!

手册:http://php.net/manual/zh/features.commandline.php

我的环境:Ubuntu 10.04 + php 5.2

0、看下cli模式好使不

命令行下运行 php -r 'echo php_sapi_name()."\n";'

这条命令就是在cli模式运行php语句,php -r就是run一条php命令的意思,php_sapi_name()判断当前执行的php是什么模式下,执行成功在屏幕上输出 cli,不成功说明你的php cli模式有问题。

1、第1个坑:相对路径

cli模式执行php文件就像这样:php /home/wwwroot/test.php

需要用文件的绝对路径,你的php文件中的include、require之流也要用绝对了。类似include("../xxx.php") 肯定要完蛋,因为这时的 .. 上级目录指的是当前命令行所在目录的上级,而且也没有网站根目录的概念了。不过我发现不带点的同级相对路径 include("xxx.php") 还是好使的。

喜欢

回应 推荐 喜欢 只看楼主

老袁

老袁 (蹭) 2013-10-18 21:53:20

2、第2个坑:Mysql连不上

这个问题网上很多人说cli模式没加载php.ini,或者加载的和普通模式的不一样。用php --ini可以查看,我的是/etc/php5/cli/php.ini,而通过浏览器phpinfo() 看到的是 /usr/local/php/etc/php.ini,果然不一样。

不过我感觉真正的问题在于php命令对应的执行文件和普通模式运行的php不是一个文件。运行which php,得到一个文件路径 /usr/bin/php,通常这是一个软链接,运行ls -li /usr/bin/php 可以看到它的源文件,源文件可能也是一个链接文件,就一直ls -li,直到找出最终文件,我的是/usr/bin/php5,而普通CGI模式运行的是 /usr/local/php/bin/php。用ln -s把最后一个软链接的源文件设为普通模式运行的那个,这时再运行 php --ini发现载入的php.ini和浏览器的一致了。

赞 回应

老袁

老袁 (蹭) 2013-10-18 21:57:33

然后就没什么大坑了,一些变量比如 $_SERVER['HTTP_HOST'] 肯定没了,$_SERVER['PHP_SELF'] 也变成了文件绝对路径。用了几天发现cli模式确实爽,够稳定,占用资源也少,回头把爬虫全搞成cli模式!

赞 回应

老袁

老袁 (蹭) 2013-11-27 08:57:55

3、第3个坑:后台运行

在命令行直接php 运行脚本,如果运行的是长时间任务,那么切出光标脚本就停止了。既然我们用cli模式就是要干长时间的活,所以一定要用后台运行格式:nohup php /home/wwwroot/test.php & ,运行后屏幕会显示进程pid,这时要按Enter切出光标,按别的进程就停了。

查看所有后台运行的cli 进程: ps aux | grep '[ ]php' ,网上很多文章都只写ps,在我的机器上用ps只能看到刚刚运行的进程,过一段时间后就看不到了。停止进程就kill 相应的pid,如果脚本有输出的话,nohup运行的所有输出都在nohup.out 文件中,可以用tail或vi查看它 tail -f nohup.out

赞 回应

老袁

老袁 (蹭) 2014-03-07 09:12:01

没人关心。。。

赞 回应

有天你能看到

有天你能看到 (希望有一天和你再见,我爱你) 2014-04-15 20:26:48

有阿

赞 回应

ImN1

ImN1 2014-04-16 16:54:53

有,不怎么爱打字,cli 偶用了很多年了,我最早的爬虫就是用php cli做parse的

赞 回应

✪_✪

✪_✪ (举头三尺有神明) 2014-04-16 17:06:08

php cli 也用了很久了,一直很稳定。我们是用 supervisor 来做进程管理的,非常好用。

赞 回应

老袁

老袁 (蹭) 2014-04-16 17:21:37

有,不怎么爱打字,cli 偶用了很多年了,我最早的爬虫就是用php cli做parse的 ImN1

嗯,我也是写爬虫,我还用web界面管理cli进程

赞 回应

老袁

老袁 (蹭) 2014-04-16 17:22:29

php cli 也用了很久了,一直很稳定。我们是用 supervisor 来做进程管理的,非常好用。 ✪_✪

我用web管理。。。用web来启动cli进程可能不大安全吧,反正是本地的爬虫机

赞 回应

✪_✪

✪_✪ (举头三尺有神明) 2014-04-16 17:24:30

我用web管理。。。用web来启动cli进程可能不大安全吧,反正是本地的爬虫机 老袁

web 启动也做过,ignore_user_abort 采集QQ签名和微博,就是管理调试起来略麻烦。

现在做的是恶意网址后台扫描。

我要提问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值