2012年12月

Merry Christmas

圣诞节,今天见到了楚楚,时间好快,一晃就是一年.国外一年让他改变了一些.但是更多的还是没有改变.很高兴他恋爱了,但是可悲的是陷了进去.我劝不了他,劝了也是没有用的.有些事情,总是得自己来.

不知道miibotree怎样了.希望他能够追求到自己想追求的.

买了很多V的面具,送给协会的人.没想他们像V那么做.而是想和他们说:这张面具下不仅仅是肉体,而是思想,思想是不怕子弹的.

晚上和他们唱歌去,想喝酒,可是身上没多少钱了...

最近和Lu又走近了,我的出发点或许是错了.也许就单纯是寂寞了之类的.我不知道Lu和我会这么像,我总能猜到ta想的,也许同个星座的就是这样...

当叔叔了,特别开心,我有侄子了!哈哈,我一定要当一个好叔叔,给我侄子买很多玩具,然后教他很多很多东西.

看得一句很经典的:至于爱情,不必着急,命运会给我们安排,只要我们慎重选择就好了.

最后告诉我在意的人和在意我的人:Merry Christmas!

Linux注册系统服务

注册一个系统服务,开机自启动.

1 脚本编写


#vim test.sh

#!/bin/bash

#description: hello.sh
#chkconfig: 2345 20 81

EXEC_PATH=/usr/local/
EXEC=hello.sh
DAEMON=/usr/local/hello.sh
PID_FILE=/var/run/hello.sh.pid

. /etc/rc.d/init.d/functions

if [ ! -x $EXEC_PATH/$EXEC ] ; then
       echo "ERROR: $DAEMON not found"
       exit 1
fi

stop()
{
       echo "Stoping $EXEC ..."
       ps aux | grep "$DAEMON" | kill -9 `awk '{print $2}'` >/dev/null 2>&1
       rm -f $PID_FILE
       usleep 100
       echo "Shutting down $EXEC: [  OK  ]"
}

start()
{
       echo "Starting $EXEC ..."
       $DAEMON > /dev/null &
       pidof $EXEC > $PID_FILE
       usleep 100
       echo "Starting $EXEC: [  OK  ]"
}

restart()
{
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	status)
		status -p $PID_FILE $DAEMON
		;;
	*)
		echo "Usage: service $EXEC {start|stop|restart|status}"
		exit 1
esac

exit $?

2注册服务

- 阅读剩余部分 -

hackerathon点滴

去了SegmentFault举办的hackerathon,连续干活二十几个小时,刚刚回到实验室,整个人累趴了。还有半个多月就要期末考试了,目前为止没有一门专业课是听的懂的。。。明天就要开始复习了,接下来到期末考试结束的日子里少碰代码了,认真复习去了。。。

Linux文件系统

之前对磁盘分区已经有了详细的描述,这篇主要介绍文件系统.Linux的文件系统是出了名的.下面就

大概介绍下.

可以把文件系统大概分成 SuperBlock inodeBlock DataBlock 三部分

SuperBlock


SuperBlock记录文件系统的基本信息比如每块数据块的大小,空闲磁盘的块数信息.

inodBlock

- 阅读剩余部分 -

mysql-bin0000xx处理

今天一看vps磁盘空间暴涨,然后用 du --max-depth=1 -h 从根目录一级一级往下查,最后发现在mysql子

目录下发现很多mysql-bin0000等文件,这应该是日志文件。通过下面的可以清除:

到 /usr/local/mysql/var 把日志清了。或者

/usr/local/mysql/bin/mysql -u root -p
mysql> reset master;

vim /etc/my.cnf

log-bin=mysql-bin
binlog_format=mixed

这两行注释了,重启mysql就OK。

 

浅谈Linux下mv和cp命令的区别

我之前在项目中遇到一个很奇怪的问题,对于inotify监视一个文件的时候,发现有些时候inotify有些时候会

“失效”。后来我就没办法,去监视文件所在的目录。看下面的,

[code]
#!/bin/bash

src=/tmp/test/test.txt # directory to monitor
/usr/local/bin/inotifywait -rmq -e modify $src | while read event
do
echo "hello"
done
[/code]

奇怪的现象就是如果我 mv test.txt  /tmp/test/test.txt 的时候,发现 inotify 竟然没有触发,但是我无意中

发现 cp test.txt  /tmp/test/test.txt 的时候,强制覆盖了,发现 inotity 就触发了。我这两天上OS的时候,突

然间想到了原因。可能是 inode 节点的问题,看下面

- 阅读剩余部分 -

第一个内核程序"Hello World"

内核模块可以用insmod来动态加载,用rmmod来动态卸载.与应用层编程的不同在于,内核模块需要一个

初始化函数和一个清理函数,在向内核加载模块的时候调用初始化函数,卸载模块的时候调用清理函数.与

传统把函数编译进内核相比,通过模块的形式大大提高了开发的效率.

下面是内核版本的Hello World,先看代码

- 阅读剩余部分 -

awk小技巧

[code]
awk指定多个分隔符号
echo "hello=world=from=linux&google" | awk -F "[=&]" '{print $1,$2,$3,$4,$5}'
==>> hello world from linux google
awk以字符串作为分隔符
echo "hello=world=from=linux&google" | awk -F "from" '{print $1,$2}'
==>> hello=world= =linux&google
awk 给外部变量赋值
采用eval可以对执行的命令做两次扫描,第一次是做替换,第二次是真正执行
eval $(echo "hello=world=from=linux&google" | awk -F "[=&]" '{printf("a=%s\nb=%s\nc=%s\nd=%s\ne=%s\n",$1,$2,$3,$4,$5)}')
echo $a $b $c $d $e
==>> hello world from linux google
[/code]

inotify 安装

传统的rsync+crontab同步数据和实际会有差异,而inotify则基本可以达到实时的效果,当文件有任何变

动,就会触发inotify。

inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删

- 阅读剩余部分 -

Mysql 数据库自动备份Shell脚本

#!/bin/bash
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab

USER=root
PASSWORD="123456"
DATABASE="test"
HOSTNAME="192.168.156.61"

WEBMASTER=test@qq.com

BACKUP_DIR=/home/firefoxbug/mysql_back/ #备份文件存储路径
LOGFILE=/home/firefoxbug/mysql_back/data_backup.log #日记文件路径
DATE=`date '+%Y%m%d-%H%M'` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
OPTIONS="-h$HOSTNAME -u$USER -p$PASSWORD $DATABASE"
#mysqldump -help

#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
        mkdir -p "$BACKUP_DIR"
fi

#开始备份之前,将备份信息头写入日记文件
echo " " >> $LOGFILE
echo " " >> $LOGFILE
echo "———————————————–" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "———————————————– " >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
	#创建备份文件的压缩包
	tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
	#输入备份成功的消息到日记文件
	echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE
	#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
	rm -f $DUMPFILE
else
	echo “Database Backup Fail!” >> $LOGFILE
fi
#输出备份过程结束的提醒消息
echo “Backup Process Done”


放到crontable里面!十分钟执行一次
crontab -e
*/10 * * * * /tmp/auto_log.sh >/dev/null  2>&1