Curl '挂掉'

最近遇到一个问题.

额, 先讲下背景吧. 业务需求是一个定时抓取的资讯的任务A(在laravel 5.2 框架下),  A 是每十分钟跑一次, 但是线上一直没有数据, 于是乎查找了, 因为A任务设置了不重复启动(即如果A十分钟没有完成就不会再起一个),.这个互斥实现是这样的, 任务启动时就会生成一个空文件(指定目录下), 任务结束后文件也就会被删除, 如果文件不被删除, 那任务就一直不会再启动. 所以线上一直没有数据. 看了下文件的创建时间,果然,很久了.

好了, 那找原因吧, 先加个try catch, 把错误打到日志吧, 放它跑一段时间, 等待任务"挂掉", 果然没过多久就"挂掉"了, 查日志吧,草,毛都没有.

想: 不会是内存溢出了吧. 重新看看代码, 没有什么大数组操作啊,一行一行打印吧, 看看问题出在那里了.

果然让我找到了, 试了几次, 都是Curl get的时候‘挂掉‘, 奇怪了, Curl 怎么会直接挂掉那, 当时也没多想(curl 用的是github有人维护的项目),.

于是自己"天才"了一把, 如果文件创建一个小时还没在的话那就把它删了吧, 嗯,就这样.由于任务机制是框架的, 改了麻烦, 那就跑哥定时任务吧. 写完后,搞定. 跑了半天, 没毛病, 差点都佩服自己了.

第三天, 服务器cpu 飙到98%报警了, 你妹啊, 赶紧查了下, 都是那个定时任务的进程, 先手动杀些再说.

curl "挂掉", 进程不会回收, 请教了老大一下. 如果是进程关掉, 系统肯定会回收的, 进程还在只可能是程序的死循环.

curl 死循环, 不至于吧. google了一番, 发现多数都有提到请求次数的限制(即 CURLOPT_TIMEOUT), 看看任务,果然没有设置, 然后把curl 次数限制了下, 就没有再出现问题, 搞定.

Curl '挂掉'

时间: 2024-07-28 21:50:48

Curl '挂掉'的相关文章

PHP下通过file_get_contents\curl的方法实现获取远程网页内容

[php]PHP中file_get_contents()与file_put_contents()函数细节详解 php函数file_get_contents(一) 案例: 早在2010年时候遇到过这样的事情,因为file_get_contents函数造成服务器挂掉的情况,现在觉得很有必要总结下. 公司里有经常有这样的业务,需要调用第三方公司提供的HTTP接口,在把接口提供的信息显示到网页上,代码是这样写的: file_get_contents("http://example.com/")

保护你自己免受 `curl <url> | sh`的危害

除非你最近没有安装过开发者关注的第三方软件,否则你很可能被建议使用如下命令直接从网络上进行安装. ? 1 curl -s http://example.com/install.sh | sh 本文并不是为了讨论这个方法的好坏,而是为了提醒那些使用此方法的人,这个方法除了那些明显的缺点外,它还有另一个隐患:直接将第三方数据通过管道传入 shell.现在有很多关于这个方法的讨论,支持它的一种观点认为要执行的脚本是透明的——你可以在命令执行前用浏览器打开该脚本并对其进行简单的检查. 本文的主要目的在于

研究curl

<?php // file_get_contents 如何读取的是一个链接如果链接失效就会服务器挂掉所以要设置超时函数$opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>10, ) ); $context = stream_context_create($opts); $back=file_get_contents("http://api.yizhancms.com/video/index

ElasticSearch笔记整理(二):CURL操作、ES插件、集群安装与核心概念

[TOC] CURL操作 CURL简介 curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求.简单的认为是可以在命令行下面访问url的一个工具.在centos的默认库里面是有curl工具的,如果没有请yum安装即可. curl -X 指定http的请求方法 有HEAD GET POST PUT DELETE -d 指定要传输的数据 -H 指定http请求头信息 curl创建索引库 curl -XPUT http://<ip>:9200

Curl的移植编译以及注意事项

最近需要用curl来发送http请求,遇到了不少问题,查了不少资料,都是零零散散的,现在总结下.   1.移植编译 1 ./configure --prefix=$(PWD)/build --host=arm-XXX-linux;make ;make install 这步基本都没有问题,生成的动态链接库libcurl.a,可以直接给应用程序去使用. 2.API使用 1)全局初始化 curl_global_init(CURL_GLOBAL_ALL); 2)通过curl_easy_init得到一个C

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:60' in D:\wwwroot\weixinpa

php curl 伪造IP来源的实例代码

curl发出请求的文件fake_ip.php: 代码 代码如下: <?php $ch = curl_init(); $url = "http://localhost/target_ip.php"; $header = array( 'CLIENT-IP:58.68.44.61', 'X-FORWARDED-FOR:58.68.44.61', ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPH

Linux系统curl命令

curl命令 curl  -I  网址    //-I :省略源代码查看,内容如下: 我们查看的是HTTP/1.1 200 OK 这一行 常用状态吗有:200 301 302 404 403 502 503 上述状态码中,只有  200 是OK 的 如果出现301 302 ,它可能是因为在服务端设置了  跳转 ,内容如下: 上图显示,HTTP/1.1 301 设置了跳转,跳转到了下面:Location:http://www.aminglinux.com/bbs/forum.php -x  可以指

关于curl跳转抓取

今天在公司碰到了一个bug,就是以前一直用curl下载的MP3录音文件为空了,但是浏览器去get请求是有文件的,并且大小还不是0kb,但是我用curl下载下来就是0K,百思不得其解.终于功夫不负有心人,得到了方法,原来我一直要去第三方的接口拿到录音数据,但是今天的录音数据中地址跳转了,也就是第一次请求的地址返回的是302, 这是以前的代码 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // curl_setopt($ch, CUR