[原创] 解决Linux系统上由于程序占用的文件描述符(file descriptor)过多导致的异常问题

 
前几天发现服务器上的一个JAVA程序表现很不对劲,运行起来特别“慢”,仔细一看程序的日志,发现里面有Exception抛出,提示“too many open files”,由于无论是读写文件还是创建网络连接,都需要占用文件描述符(fd),于是怀疑是服务器上的某个程序占用的资源没有释放,达到了系统设置的上限从而导致程序异常。
阅读更多

[原创] log4cxx在Linux下的安装、使用

简单地说,log4cxx就是一个记录日志的C++库(程序运行的时候要保存一些日志到文件,以供将来查看),它是从著名的Java日志库log4j移植而来的,并且它是Apache的一个项目,质量有保证,不用犹豫了,就用它吧!

补一句:Apache声称log4cxx的速度快、灵活性好,但是,速度快是第一位的,灵活性是第二位的("Log4cxx claims to be fast and flexible: speed first, flexibility second."),所以,担心日志记录性能的同学更可以选择log4cxx啦。

但是,这玩意的安装、编译稍微有点麻烦,如果遇到了问题,没耐心的人可能就没兴趣折腾了,我在这里把自己遇到的问题记一下。

系统环境:RHEL 5.3,64位

 

阅读更多

[原创]后台运行的shell脚本对文件锁的影响

假设shell脚本A中的一段代码设置有文件锁,在此文件锁的后面(外部)以后台运行的方式调用了脚本B(此脚本中也有文件锁,但是与脚本A的锁文件不是同一个文件),并且脚本B执行时间相当之长,那么,在后台运行的脚本B在结束之后,是否会导致脚本A无法启动第二个进程呢?

下面就来做一个简单的试验,以确定上面的问题。

脚本A(parent.sh)内容如下:

#!/bin/sh
SHELL_DIR="/root/"
LOCKFILE_1=$SHELL_DIR".lock1"
{
    echo "Go into lock1."
    if ! flock -n 4; then
        echo "*** Shell is running, quit."
        exit 1
    fi
} 4<>$LOCKFILE_1

$SHELL_DIR"child.sh" &      # run shell B on background 

阅读更多

[原创]Nagios安装、配置、问题记录(1)

 

 

 

本文描述了我在使用Nagios的过程中遇到的一些问题、解决办法以及总结的注意事项。文章很长,请使用Ctrl+F定位到你需要的部分。

Nagios是一套强大的监控报警系统,但是你不花一些时间,是绝对不可能很好地配置它的。除非你只需要监控主机的alive等简单的情况(例如ping),否则请放弃幻想,以极大的耐心去研究它吧。

 

(1)默认安装情况下,Nagios的主配置文件为:/usr/local/nagios/etc/nagios.cfg

打开这个文件,可以清楚地看到它指定了其他的配置文件:

阅读更多

shell脚本因文件编码问题不能正确执行的问题

遇到一例因shell文件的编码问题导致执行后不能得到正确结果的问题。一般来说脚本中不会带有中文,不过有时候例外,例如你要查找一个文本中的字符串,cat test.txt | grep "汽车"  这样的命令,如果文件编码不对,就可能得不到正确结果。

阅读更多

用shell将时间字符串与时间戳互转

在shell中,字符串转换为时间戳可以这样做:

date -d "2010-10-18 00:00:00" +%s

不需要指定时、分、秒的话,直接写日期就可以了:

date -d "2010-10-18" +%s

输出形如:

1287331200

其中,-d参数表示显示指定的字符串所表示的时间,+%s表示输出时间戳。

阅读更多

[原创]rsync同步时,只同步指定的文件类型

使用rsync来同步文件时,如果想要只同步指定的文件类型,怎么做?

我的环境:rsync客户端将文件推送到rsync服务器端。搜了一下网络,看了一下rsync help,似乎是要用exclude参数和include参数配合来实现规则,从而达到只同步指定类型文件的效果,但是我试了一下没成功,于是最终采用了一种可以实现的方法:排除其他所有文件类型。虽然比较麻烦,但是能做到就行

阅读更多

[原创] 用shell判断一个字符串是不是全为数字 & 截取字符串的若干示例

文章来源:http://www.codelast.com/

 

(1)判断一个字符串是不是全为数字

#!/bin/sh

# 该变量就是要判断的变量
VAR="1234908"

RET=`expr match $VAR "[0-9]*$"`
if [ ${RET} -gt 0 ]; then
	echo "It is a Number!"
else
	echo "Not a Number!"
fi

文章来源:http://www.codelast.com/

另外要注意:用这种方式来判断负数的时候,也认为不是全为数字的,因为负数中带了一个负号,就不是数字

阅读更多

[原创]在Linux下进行文件“粉碎”/擦除

文章来源:http://www.codelast.com/

 

众所周知Windows下的文件删除之后是有可能恢复的,对重要文件,为了增加恢复的难度,我们可以用文件粉碎工具进行文件粉碎。我最常用的是集成到资源管理器中的Eraser。那么在Linux下有没有类似的软件呢?我在一台只有Ubuntu系统的主机上,安装了一个文件粉碎工具wipe,有些想法,记下来。

安装:apt-get install wipe

wipe有没有GUI我不知道,命令行也不难用:

阅读更多