存档

文章标签 ‘shell’

记录下php中fopen,file_get_contents,curl的区别

2011年11月23日 没有评论

1. fopen /file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen /file_get_contents 好很多。
2. fopen /file_get_contents在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些。
3. fopen / file_get_contents函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响。
4. curl可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。而fopen / file_get_contents只能使用get方式获取数据。file_get_contents 获取远程文件时会把结果都存在一个字符串中 fiels函数则会储存成数组形式
因此,我还是比较倾向于使用curl来访问远程url。Php有curl模块扩展,功能很是强大。没事可以研究一下。
用到采集的时候还是比较喜欢用PHP的采集类 Snoopy

linux shell program – for in 循环语句的用法

2011年8月4日 没有评论

在写一个小脚本时,需要循环显示每月日期当参数,传递给请求的地址。大脑一拍,直接用for循环做了,如果python可以直接使用for xxx in range(0,32),那么Linux是不是也有类似的写法呢,答案是正确的,不过略微有点小改动。语法如下:
for 无$变量 in 字符串
do
$变量
done
利用for in格式对字符串按空格切份的功能,直接遍历,于是上面的字符串我们可以随便定义,只需空格隔开即可。

SERVICES="22 80 25 110 8000 23 20 21 3306 "
for x in $SERVICES
do
    iptables -A INPUT -p tcp --dport $x -m state --state NEW -j ACCEPT
done

for i in a b c 字符串列表A B C
字符串用空格分隔,没有括号,没有逗号, 然后循环将其依次赋给变量i.变量没有$
于是我们的日志处理脚本,可以这么写了

#!/bin/sh
DAYS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31"
for dst in $DAYS
do
/usr/bin/wget "http://gamecenter.renren.com/weige.jsp?y=$1&m=$2&d=$dst" -O a.txt
done
分类: Linux, 技术收集 标签: , ,

Nginx出现502和504错误提示的解决方案

2011年8月3日 没有评论

今天在测试机器上搞了个web论坛,discuz的,还算轻车熟路,直接用nginx+fast-cgi,搞了几下就运行一起来了,可是没多久就出现问题了,访问首页的时候,总是提示502或者504的,很是郁闷,潜意识里觉得是fast-cgi没搞正确,在度娘上搜了下果然如此,简单记录下吧。
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止。
Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI。
一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关,而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。
php-fpm.conf有两个至关重要的参数,一个是“max_children”,另一个是”request_terminate_timeout” ,但是这个值不是通用的,而是需要自己计算的。
解决办法如下:
1、调整php-fpm.conf的相关设置:

<value name="max_children">32</value>
<value name="request_terminate_timeout">60s</value>

2、调整nginx.conf的相关设置:

fastcgi_connect_timeout 600; #set timeout
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 256k;
fastcgi_buffers 16 256k;   # 16*256,可以继续调大
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;

关于fastcgi buffer相关的日志,可以参考这篇
3、终级解决方案: 阅读全文…

分类: 技术收集 标签: , , , ,

Use crontab to finish works which will deal with access logs and load into infobright database

2011年7月21日 没有评论

在昨天的文章中,我们讲述了如何使用Python来访问Java程序,在今天我们继续聊聊脚本的知识。最近由于业务的需要,给数据运维人员搞了个先进的数据查询引擎-Infobright,有关infobright的鼎鼎大名早已经是如雷贯耳,数据压缩上确实很牛叉,可以参考《Infobright数据仓库搭建》《Infobright的数据类型以及优化相关》。这几篇都跟mysql优化类似,但是略有不同还是注意的好,为了更好的优化效果,比如我在创建数据库表的时候就把原来的Varchar类型的字段创建成了Char,因为varchar的效率很低。
数据引擎搭建起来了,接下来我们需要自动的把数据加载到我们的数据库,由于众所周知的原因,目前社区办的ICE只支持load加载数据,所以我们得把我们的日志文件先处理成Infobright能够接受的类型,比如常见的csv格式。然后使用脚本自动的把我们的结果数据搞到数据库里面就可以了。
第一个脚本,完成日志目录的创建,日志合并,日志处理

#!/bin/sh
 
export LOG_DIR=/data1/remote-log-server/log/
today=`date "+%Y-%m-%d"`
yestoday=`date -d '1 days ago' "+%Y-%m-%d"`
 
GameLoginPath=$LOG_DIR/gamelogin/$today
 
#merge yesterday log
/bin/cat $LOG_DIR/gamelogin/$yestoday/gamelogin.log.* > $LOG_DIR/gamelogin/$yestoday/gamelogin.log
#use python script deal with access log to infobright data format
/usr/bin/python /data1/weige/python/gamelogin_weige.py $yestoday 99
#auto load data which can be accepted by infobright engine
/bin/sh /data1/remote-log-server/update_data_to_db.sh $yestoday
 
#create today log dir
if [ ! -d "$GameLoginPath" ]; then
        /bin/mkdir -p "$GameLoginPath"
fi

接下来的章节,我们将详细分拆解释我们这个脚本中间运行的这三个脚本,同时进一步对resin容器进行优化。

记录一下sprintf的格式

2010年6月29日 4 条评论

每次都记不清,每次都要单独查询,哈哈。
sprinf的格式输出如下:
[标志][输出最少宽度][.精度][长度]类型
再来几个小例子,巩固下:
“%-md” :左对齐,若m比实际少时,按实际输出。
“%m.ns”:输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
e.g. “%7.2s” 输入CHINA
  输出” CH”
“%m.nf”:输出浮点数,m为宽度,n为小数点右边数位
e.g. “%3.1f” 输入3852.99
输出3853.0
d是数字,s是字符串,f是浮点类型,常用的就这些了。

分类: 技术收集 标签: ,