一直跑在亚马逊服务器上的一些Facebook应用,昨天抽风了,平时正常的页面都出现了504的timeout错误。Web使用的是Django,于是查看日志,发现N多记录:

SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /(ip x.x.x.x) !!!

write(): Broken pipe [plugins/python/wsgi_subhandler.c line 193]

然后看nginx的error日志:

[error] 16948#0: *21 upstream prematurely closed connection while reading response header from upstream

费了半天力气跟踪代码,发现是卡在调用facebook的api上,以前一直是好好的,怎么突然出问题了?

在服务器上尝试wget一下www.facebook.com,get不下来,才发现是亚马逊的DNS解析facebook的域名出问题了。于是调用facebook的api的那段代码就timeout了……

于是临时把DNS换成8.8.8.8,一切正常,坑爹的亚马逊……

VN:F [1.9.22_1171]
Rating: 10.0/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: +3 (from 3 votes)

刚刚安装Python的MySQL支持库,一口气遇到了一连串的问题,好在Google一下,均解决。遂记录下,备忘。

1.下载Python的MySQL支持库

地址:http://sourceforge.net/projects/mysql-python/

2.解压编译

python setup.py install

遇到第一个问题:

_mysql.c:44:23: error: my_config.h: No such file or directory

解决办法,编辑setup_posix.py文件,将mysql_config.path设置成你安装的mysql的目录,比如/usr/local/mysql/bin/mysql_config

3.在python中"import MySQLdb",遇到问题:

ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory

解决办法,编辑/etc/ld.so.conf.d/mysql-i386.conf文件

改成正确的mysql安装地址,比如我的:usr/local/mysql/lib/mysql

存盘后退出,执行ldconfig

4.搞定,打完收工

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

写服务器程序的免不了要经常和 crontab 打交道,定时执行一些脚本什么的。大部分情况下都是 bash 的一些 shell 脚本,但 shell 我不是很熟悉,于是在很多情况下都直接写 Python 脚本来搞定它。今天写了一个操作 PostgreSQL 数据库的 Python 脚本,放到 crontab 中定时执行的时候,时间到了却没有任何反映。但是如果在命令行下直接执行的话,没有任何问题。

首先看看 crontab 的日志(/var/log/cron),日志中显示脚本定时执行了。那么一定是在 crontab 运行该脚本的时候报错。直接在 Python 脚本中从第一行开始写一个大大的 try 模块,显示一下 Exception 的内容。果然,抓到了…… 错误日志显示显示 Python 找不到 libpq.so.5 这个 PostgreSQL 的库。

原来 crontab 的运行环境和我们用 root 登录进去的环境都是不同的,需要在运行 Python 脚本前重新设定一下运行的环境变量如 LD_LIBRARY_PATH。这下比较好办了,直接写一个 shell 脚本,设置一下环境变量,再调用 Python 吧。 libpq.so.5 这个库我是装在 /usr/local/pgsql/lib 中。最后的脚本如下:

搞定,crontab 又跑得欢快起来了。

折腾了一个上午,写下来备忘。

VN:F [1.9.22_1171]
Rating: 9.6/10 (24 votes cast)
VN:F [1.9.22_1171]
Rating: +2 (from 4 votes)