BugZilla 中创建以 bug_id 命名的文件夹

Bugzilla 是 Mozilla 公司提供的一个开源的免费缺陷跟踪工具。作为一个产品缺陷的记录及跟踪工具,它能够建立一个完善的 Bug 跟踪体系。

项目需要用大量的 GDS 文件来进行测试,一个 GDS 文件动辄上百兆,使用 BugZilla 上传测试用例肯定不现实了。一开始把一堆测试文件散仓的放在某个文件夹下,当 bugid 增加到3位数后,里面的文件已经混乱不堪了!必须要想办法整理一个干净的测试用目录,即方便测试,又可以间接的减少 debug 的时间。

大致的流程就是在 file bug 的时候生成一个 Product/Component/id 这样的文件夹,然后开启 BugZilla 的 AttachURL,直接填写测试用例地址

先搞定生成文件夹,修改 post_bug.cgi

查找这个bugid所属的 product:

my $Product = $dbh->selectrow_array('SELECT name FROM products WHERE id in (SELECT product_id FROM bugs WHERE bug_id = ?)', undef, $id);

可以用同样的方法查找 component 后创建文件夹,好在 perl 可以直接使用 mkdir 直接创建文件夹

mkdir "PATH/$Product/$Component/$bugid";

BugZilla 默认的 AttachURL 只支持 http|https|ftp,为了方便使用 NFS,所以需要添加 file:// 这样的 URL,修改 Bugzilla/Attachment.pm line 555

($data && $data =~ m#^(http|https|ftp|file)://\S+#)

局域网内获取公网IP脚本

公司没有固定 IP,每次 VPN 过去前都要先电话问一下那边的 IP 是多少,非常不方便,在不花钱的情况下只能曲线解决了。

思路很简单,从提供在线查询 IP 的网站上获取路由当前的 IP,然后和上一次存储的 IP 地址进行对比,不一样的话就覆盖上一次的记录并将现在获取到的 IP 以邮件的形式发送出去。

#!/bin/sh

IPFILE="extip.txt"
SENDTO=ADMINISTRATOR MAIL

if [ -f $IPFILE ]; then
	SAVEDIP=`cat $IPFILE`
else
	SAVEDIP="0"
fi

extIP=`wget -O - -q http://www.3322.org/dyndns/getip`

if [ "$SAVEDIP" = "0" -o "$SAVEDIP" != $extIP ]; then
	echo $extIP > $IPFILE
	mail -s "External IP Update" $SENDTO < $IPFILE
	cat $IPFILE
else
	echo "No change"
fi

将脚本扔到 crontab 里定时运行。

简单监控 MySQL 的脚本

放假前写的,监控服务器端的 MySQL 状态。

#!/bin/sh  
  
MUSER=MySQL User
MPASS=MySQL Password 
MHOST=MySQL Host  
MSTART="/etc/init.d/mysqld start"  
MADMIN=/usr/bin/mysqladmin 
MTO=Administrator Email 

$MADMIN -h $MHOST -u $MUSER -p"${MPASS}" ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then  
    echo "Server ERROR: MySQL Service Stopped. Restart Service..."  
    $MSTART>/dev/null  
    sleep 3 
    o=$(ps cax | grep -c ' mysqld$')  
    if [ $o -eq 1 ]; then  
        echo "MySQL Restart Success."
    else  
        echo "MySQL Service Stopped." | mail -s "MySQL Server Crashed" $MTO
    fi  
 
else  
    echo "MySQL is alive"  
fi  

功能很简单,监控 MySQL 服务是否运行,如果挂了就尝试重启服务,重启失败就发邮件通知管理员。把这个 script 放到 crontabe 里就完事了。