给fast-cgi方式的php做一个检查脚本

使用fast-cgi方式的php在使用,有时候由于编写的代码问题,使处理代码的php-cgi进程的运行占用很多时间,在将所有活动的 php-cgi 进程都占用后,web服务器对php的请求就失去响应了。

通过命令查看服务器上一共开了多少的 php-cgi 进程

  1. ps -fe |grep "php" | grep -v "grep" | wc -l

使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求

  1. netstat -anop | grep "php" | grep -v "grep" | wc -l

当被使用的php进程接近所开启的php进程数时,可以考虑将被耗用的php进程释放一下,以防止网站访问的阻塞。

按照以上思路编写了一个检查脚本。

  1. #
  2. #!/bin/sh
  3. #
  4.  
  5. echo "begin check"
  6.  
  7. #define default check delta num
  8. defdeltacount=10
  9.  
  10. phpcount=`ps -fe |grep "php" | grep -v "grep" | wc -l`
  11. netstatcount=`sudo netstat -anop | grep "php" | grep -v "grep" | wc -l`
  12.  
  13. echo "  php process count is $phpcount
  14.  netstat process count is $netstatcount"
  15.  
  16. deltacount=`expr $phpcount - $netstatcount`
  17.  
  18. if [ -n "$1" ]; then
  19.   defdeltacount=$1
  20. fi
  21.  
  22. echo "deltacount is $deltacount, defdeltacount is $defdeltacount"
  23.  
  24. if [ $deltacount -lt $defdeltacount ]; then
  25.   echo "  need reset"
  26.   sudo /root/tools/resetphp.sh
  27. else
  28.   echo "  not need reset"
  29. fi
  30.  
  31. echo "check end"

其中 /root/tools/resetphp.sh 为编写的php重启脚本。
脚本可以放到 crontab 中,做自动定时检查处理。

Popularity: 25% [?]

Related

修改Trac的默认Wiki页面显示

在Trac中可以通过trac.ini中的mainnav节的设置来做导航wiki地址的自定义

[mainnav]
wiki.href=/wiki/ZhWikiStart

可以设置导航上的wiki连接地址为/wiki/ZhWikiStart,不过打开Trac后的默认wiki页还是没有变,还是使用的WikiStart。
有没有办法将登陆Trac后的默认页面也可以做定制设置,这样就既可以保留原有Trac的Wiki内容,又可以默认显示自己的期望的首页Wiki页面。

方法是有的,只要修改Trac-0.11.1的wiki目录下web_ui.py文件的下面一些地方就可以达到目的了。
首先在前面的import部分添加一行

  1. from trac.config import Option

给trac.ini中的wiki节添加一个default_wiki配置项,在

  1.     PAGE_TEMPLATES_PREFIX = 'PageTemplates/'
  2.     DEFAULT_PAGE_TEMPLATE = 'DefaultPage'

后添加一行代码修改为

  1.     PAGE_TEMPLATES_PREFIX = 'PageTemplates/'
  2.     DEFAULT_PAGE_TEMPLATE = 'DefaultPage'
  3.  
  4.     _default_wiki = Option('wiki','default_wiki','WikiStart')

再将

  1.     def _wiki_ctxtnav(self, req, page):
  2.         """Add the normal wiki ctxtnav entries."""
  3.         add_ctxtnav(req, _('Start Page'), req.href.wiki('WikiStart'))
  4.         add_ctxtnav(req, _('Index'), req.href.wiki('TitleIndex'))

修改为

  1.     def _wiki_ctxtnav(self, req, page):
  2.         """Add the normal wiki ctxtnav entries."""
  3.         add_ctxtnav(req, _('Start Page'), req.href.wiki(self._default_wiki))
  4.         add_ctxtnav(req, _('Index'), req.href.wiki('TitleIndex'))

最后将

  1.     def process_request(self, req):
  2.         action = req.args.get('action', 'view')
  3.         pagename = req.args.get('page', 'WikiStart')

修改为

  1.     def process_request(self, req):
  2.         action = req.args.get('action', 'view')
  3.         pagename = req.args.get('page', self._default_wiki)

修改trac.ini配置文件,给wiki节添加配置default_wiki配置项,设置自己期望的默认页面

[wiki]
default_wiki=myStart

重新启动tracd看效果,一切都如自己所希望的

Popularity: 25% [?]

Related

Trac的PeerReview插件中文乱码解决

为Trac安装了PeerReview插件,安装过程见http://www.sunnyu.com/?p=90,使用过程中发现在browse文件内容显示中的中文显示又是乱码了,于是看了 peerReview的代码,发现只要稍作修改就可以解决。
在 peerReviewBrowser.py 和 peerReviewPerform.py 文件中搜索代码

  1.         mime_type=node.content_type

将其修改为

  1.         mimeview = Mimeview(self.env)
  2.         mime_type = mimeview.get_mimetype(node.name)

peerReviewBrowser.py 是在 def _render_file(self, req, context, repos, node, rev=None):函数中
peerReviewPerform.py 是在 def process_request(self, req): 函数中

修改后重新安装插件,再次打开文件内容,中文显示正常。

Popularity: 35% [?]

Related

为Python2.5安装Trac添加PeerReview插件时需要的ClearSilver模板引擎

为Trac 0.11.1安装了PeerReview插件,PeerReview是一个平级代码审查的插件,
首先重网站上下载

  1. unzip peerreviewplugin.zip
  2. cd peerreviewplugin/0.11
  3. python setup.py install

修改trac.ini
添加如下

[components]
codereview.* = enabled

修改 mainnav 的项目,添加 peerReviewMain 项

mainnav = wiki,timeline,roadmap,browser,peerReviewMain,tickets,newticket,search

最后对 envpath 做升级

  1. trac-admin /var/trac/test upgrade

结果配置好运行后重新启动 Tracd,点击 peerReview 连接提示
AssertionError: HDF dataset not available. Check your clearsilver installation“,
缺少ClearSilver插件。
于是到 http://trac.edgewall.org/wiki/ClearSilver 查看相关信息,根据提供地址下载clearsilver补丁安装

  1. wget http://www.clearsilver.net/downloads/clearsilver-0.10.1.tar.gz
  2. tar -xzvf clearsilver-0.10.1.tar.gz
  3. patch -p 0 < diff.pach
  4. cd clearsilver-0.10.1
  5. ./configure –with-python=/usr/local/bin/python \
  6. –disable-ruby –disable-java –disable-perl \
  7. –disable-apache –disable-csharp
  8. make
  9. cp ./python/neo_cgi.so /usr/local/lib/python2.5/lib-dynload/

再次执行PeerReview功能运行正常

安装过程中碰到问题
1. clearSilver的patch 不完全
经过补丁后,./configure 会提示如下一个错误

  1. "Traceback (most recent call last):
  2.   File "", line 1, in
  3. AttributeError: 'module' object has no attribute 'sitedirs'

再次编辑 configure 文件,找到 288 行,将

  1. import site; print site.sitedirs[[0]]

修改为

  1. import sys; print [path for path in sys.path if path.find('site-packages') != -1][0]

再次 ./configure 正常

2.在make install 有错
提示 /usr/local/lib/python2.5/site-packages/setuptool-0.6c8-py2.5.egg 已经存在不是一个目录
直接用

  1. cp ./python/neo_cgi.so /usr/local/lib/python2.5/lib-dynload/

将 python目录下生成的neo_cgi.so 复制到python的库路径解决.

———————–安装后记—————————-
安装后发现其实不用装ClearSilver的,PeerReview已经有对Trac新版本使用的Genshi模板引擎的修订,就是tags/2.1-toddler-rc1这个版本。
对这个版本的说明 有一条就是: all the templates have been rewritten from ClearSilver to Genshi (now fully compatible with Trac 0.11)

Popularity: 30% [?]

Related

Trac中文显示乱码再解决

之前安装好了Trac,Perforce+Trac 0.11安装笔记(附一些问题解决方法如中文乱码问题)
设置default_charset=utf-8 使默认的版本库中的源码文件以utf-8编码显示中文,但是还有一些类型的文件是使用gbk编码的,这样就对这部分文件中的中文就显示不正常了,出现乱码。
经过对Trac源码的研究,发现Trac输出版本库中文件内容时采用的是 mimeviewer 插件,而mimeviewer插件是可以对mime类型做设置的,这样我们就可以通过mime类型来设置文件的字符编码类型。
在trac.ini 中添加如下内容

[mimeviewer]
#mime_map=text/plain; charset=gbk:c:txt:TXT,
mime_map=text/x-php; charset=utf-8:php
tab_width=4

这样就将c,txt,TXt为后缀的文件以gbk编码方式显示,而php文件以utf-8编码方式显示

有了以上的认识,我们可以对trac做如下策略的配置:
可以将大多格式的编码格式通过默认的default_charset来设置
针对个别扩展名文件的字符集通过mimeviewer设置来指定的字符集。

当然,如果相同扩展名的文件的既有utf-8的又有gbk的,那就不行了。

附mimeviewer识别字符集的顺序
1.首先看有没有对应的mime_map设置,如果有,并且有在mime_map中有该类型的charset设置,则使用设定的charset
2.如果1不满足,则自动探测是否是unicode文件,通过文件的头两个字节来识别,如果是,则返回对应的unicode字符类别

\xff\xfe     开头对应 utf-16-le
\xfe\xff     开头对应 utf-16-be
\xef\xbb\xbf 开头对应 utf-8 

3.如果1,2不满足,则返回default_charset中设置的字符集

Popularity: 28% [?]

Related

给Trac添加几个管理用插件

开始尝试Trac的使用,在有些地方感觉使用不方便,但是还好,Trac有插件来解决问题。

官方插件列表页面 http://trac.edgewall.org/wiki/TracPlugins
更多第三方插件http://trac-hacks.org/wiki

WebAdmin

首先是管理,trac-admin 的命令行管理方式多有不便,于是有WebAdmin插件,可以通过Web页面来管理

  1. svn export http://svn.edgewall.com/repos/trac/sandbox/webadmin/
  2. python setup.py bdst_egg
  3. python setup.py install

在trac.ini中添加

[components]
webadmin.* = enabled

添加 TRAC_ADMIN 权限到一个账号上。

  1. trac-admin /var/trac/test permission add test TRAC_ADMIN

AccountManager

再是账号管理AccountManager
可以方便添加,修改,删除账号,同时可以通过html方式来登陆而不是通过http的auth方式,增加了灵活性。

  1. svn co http://trac-hacks.org/svn/accountmanagerplugin/trunk
  2. python setup.py install

用管理员账号登陆后在admin页面先做插件的设置,然后在管理面板的Account页做账号管理
在plugin设置中我选择了如下一些功能模块

再在Administrator页面的Account=>Config下面,设置好密码文件的名称,我这边使用的是/var/trac/.passwd 保存

修改tracd的启动方式,去掉 –basic-auth参数,重新启动tracd,启用新的账号验证机制

Popularity: 28% [?]

Related

vsftpd服务器文件时间和本地文件时间不一致问题解决

安装的vsftpd 在ftp客户端看到的文件时间和本地时间总是不一致,刚上传的文件就相差8个小时,看起来总是不舒服。网上找了一下,原来是在 vsftpd.conf 中少了一个

use_localtime=YES

将其添加上,重新启动vsftpd服务,问题消失

Popularity: 22% [?]

Related

Perforce+Trac 0.11安装笔记(附一些问题解决方法如中文乱码问题)

网上有很多svn+Trac的安装配置文档,但是有人给做了Trac的后端版本控制扩展,是Trac的应用不再限于svn版本库,在这儿就尝试着给Trac安装一个Perforce后端版本库一下。

Trac是使用Python编写的,因此首先要个机器安装Python环境

安装Python

  1. wget http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz
  2. tar -xzvf Python-2.5.2.tgz
  3. cd Python-2.5.2
  4. ./configure
  5. make
  6. make install

为Python安装easyinstall

  1. wget http://peak.telecommunity.com/dist/ez_setup.py
  2. python ez_setup.py

安装PyProtocol

  1. wget http://peak.telecommunity.com/dist/PyProtocols-0.9.3.tar.gz
  2. tar -xzvf PyProtocols-0.9.3.tar.gz
  3. cd PyProtocols-0.9.3
  4. python setup.py install

安装SQLite3

  1. wget http://www.sqlite.org/sqlite-amalgamation-3.6.2.tar.gz
  2. tar -xzvf sqlite-amalgamation-3.6.2.tar.gz
  3. cd sqlite-3.6.2/
  4. ./configure
  5. make
  6. make install

安装 PySqlite

  1. wget http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.0/pysqlite-2.5.0.tar.gz
  2. tar -xzvf pysqlite-2.5.0.tar.gz
  3. cd pysqlite-2.5.0
  4. python setup.py install

安装Trac

  1. wget http://ftp.edgewall.com/pub/trac/Trac-0.11.1.tar.gz
  2. tar -xzvf Trac-0.11.1.tar.gz
  3. cd Trac-0.11.1
  4. python setup.py install

官方安装配置页面 http://trac.edgewall.org/wiki/TracInstall
采用简单的独立服务启动,没有使用mod_python和fastcgi等方式

  1. trac-admin /var/trac/test initenv
  2. tracd –port 8080 /var/trac/test

可以测试trac运行正常

Trac中文化Wiki

  1. svn co http://trac-hacks.org/svn/zoomquiettranslation/trunk/0.11.x
  2. trac-admin /var/trac/test wiki load default-pages/
  3. cp ZhTracGuideToc.py /var/trac/test/plugins

在trac.ini中添加如下内容

[mainnav]
wiki.href = /wiki/ZhWikiStart

[metanav]
help.href = /wiki/ZhTracGuide

添加Perforce版本库支持

Python的Perforce支持PyPerforce

  1. wget  http://downloads.sourceforge.net/pyperforce/PyPerforce-0.4.zip?modtime=1186240132&big_mirror=0
  2. unzip PyPerforce-0.4.zip
  3. cd PyPerforce-0.4
  4. python setup.py install
  5. LD_LIBRARY_PATH=/usr/local/ssl/lib python setup.py install

下载安装Perforce Plugin

  1. unzip perforceplugin_trunk.zip
  2. cd perforceplugin/trunk
  3. python setup.py bdist_egg
  4. python setup.py install

配置PerforcePlugin
修改 /var/trac/test/conf/trac.ini 文件,在trac这一节中添加如下一些内容

[trac]
repository_type = perforce
repository_dir = /

[perforce]
port = perforce:1666
user = p4trac
password = test
unicode = 0

建议在 Perforce 的配置中添加一个 只读权限并且不过期的账号,然后在Trac的配置中使用这个账号,并使用Perforce的Ticket来替代Password验证,达到不透露账号密码做保护的目的。

安装过程碰到的问题以及解决

Popularity: 32% [?]

Related

Sphinx+LibMMSeg搭建中文全文搜索引擎_安装配置

Sphinx为俄罗斯制作的开源搜索引擎,现在最新版本为0.9.8
LibMMSeg为http://www.coreseek.com 制作的基于复合最大匹配算法的中文分词法的中文分词库,采用Chih-Hao Tsai的MMSEG算法。
同时http://www.coreseek.com还为sphinx做了中文支持补丁,目前最新补丁针对sphinx 0.9.8 rc2

安装mmesg

  1. wget http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz
  2. tar -xzvf mmseg-0.7.3.tar.gz
  3. cd mmseg-0.7.3
  4. ./configure
  5. make
  6. make install
  7. cd ..

下载sphinx并打中文补丁

  1. wget http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch
  2. wget http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch
  3. wget http://sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz
  4. tar -xzvf sphinx-0.9.8-rc2.tar.gz
  5. cd sphinx-0.9.8-rc2
  6. patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
  7. patch -p1 < ../fix-crash-in-excerpts.patch
  8. cd ..

下载MySQL数据库,添加se支持

  1. wget http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.37.tar.gz
  2. tar -xzvf mysql-5.0.37.tar.gz
  3. cd mysql-5.0.37
  4. patch -p1 < ../sphinx-0.9.8-rc2/mysqlse/sphinx.5.0.37.diff
  5. BUILD/autorun.sh
  6. mkdir -p sql/sphinx
  7. cp ../sphinx-0.9.8-rc2/mysqlse/* sql/sphinx
  8.  
  9. CFLAGS="-g -O2 -fno-omit-frame-pointer" CXX="gcc" \
  10. CXXFLAGS="-g -felide-constructors -fno-exceptions -fno-rtti  -O2 -fno-omit-frame-pointer" \
  11. CXXLDFLAGS="" \
  12. ./configure –prefix=/usr/local/mysql-5-sphinx \
  13.   –enable-assembler \
  14.   –with-extra-charsets=complex \
  15.   –enable-thread-safe-client \
  16.   –with-readline \
  17.   –with-big-tables  \
  18.   –enable-local-infile \
  19.   –with-sphinx-storage-engine
  20. make
  21. make install
  22. cd ..

编译安装sphinx

  1. cd sphinx-0.9.8-rc2/
  2. CPPFLAGS=-I/usr/include/python2.4
  3. LDFLAGS=-lpython2.4
  4. ./configure –prefix=/usr/local/sphinx –with-mysql=/usr/local/mysql-5-sphinx
  5. make
  6. make install
  7. cd ../

配置sphinx

source ds_discuz
{
        type                                    = mysql

        sql_host                                = 127.0.0.1
        sql_user                                = discuz
        sql_pass                                = discuz@1\#
        sql_db                                  = discuz
        sql_port                                = 3306  # optional, default is 3306

        sql_query_pre                           = SET NAMES utf8
        sql_query_pre                           = SET SESSION query_cache_type=OFF

        sql_query                               = \
                SELECT pid, fid,tid,authorid, dateline, \
                subject, message \
                FROM cdb_posts \
                WHERE pid > $start AND pid <= $end

        sql_query_range                 = SELECT MIN(pid),MAX(pid) FROM cdb_posts
        sql_range_step                  = 1000
        sql_ranged_throttle             = 1000

        sql_attr_uint                   = fid
        sql_attr_uint                   = tid
        sql_attr_uint                   = authorid
        sql_attr_timestamp          = dateline

        sql_query_info                  = SELECT * FROM cdb_posts WHERE pid=$id
}

index discuz
{
        source                                  = ds_discuz
        path                                    = /usr/local/sphinx/var/data/discuz
        docinfo                                 = extern
        charset_type                         = zh_cn.utf-8
        charset_dictpath                    = /usr/local/sphinx/data/

        min_prefix_len                        = 0
        min_infix_len                          = 0
        min_word_len                         = 2
}

indexer
{
        mem_limit                               = 64M
}

searchd
{
        port                                   = 3312
        log                                     = /usr/local/sphinx/var/log/searchd.log
        query_log                            = /usr/local/sphinx/var/log/query.log
        read_timeout                        = 5
        max_children                        = 30
        pid_file                                = /usr/local/sphinx/var/log/searchd.pid
        max_matches                       = 1000
        seamless_rotate                   = 1
        preopen_indexes                   = 0
        unlink_old                            = 1
}

建立索引

  1. /usr/local/sphinx/bin/indexer –config /usr/local/sphinx/etc/sphinx.conf

启动 searchd 服务

  1. /usr/local/sphinx/bin/searchd –config /usr/local/sphinx/etc/sphinx.conf

测试 searchd 服务

  1. <?php
  2. require "sphinxapi.php";
  3. $q = $_POST['search'];
  4. if ($q=='') $q = '测试搜索引擎是否运行正常';
  5. echo "<form action='?' method='post'>search<input name='search' value='$q'><input type='submit' name='sub'></form>";        
  6. echo "<br/>";
  7. echo "seach $q<br/>";
  8.  
  9. $cl = new SphinxClient();
  10.  
  11. $cl->SetServer('127.0.0.1', 3312);
  12. $cl->SetMatchMode(SPH_MATCH_ALL);
  13.  
  14. $index="*";
  15. $res = $cl->Query($q, $index);
  16. print_r($res);
  17. ?>

到这儿,基本的安装配置就完成了,如果不使用修改了增加了se引擎的MySQL存储数据,就利用不了和搜索结果的交叉查询,中间关于MySQL安装的那一段可以去除。
剩下需要关注

安装碰到的问题以及解决

Popularity: 28% [?]

Related

发现一个CMU音标和KK音标的对照表

在网上发现一个CMU字典音标和KK音标的对照关系
http://blog.urdada.net/2005/07/17/17/
使用Unicode的字符对应KK音标的表示。留下记录以备日后使用。

Popularity: 28% [?]

Related

Next Page →