使用Linux shell实时检测文件变更

Fri 18 May 2012

使用python做web开发,现在流行使用uwsgi调用python程序,但是使用uwsgi一段时间发现有一个弊端,就是每次更改源代码后必须重启uwsgi才能生效,包括更改模板文件也是,我是个懒人,再经过一段时间反复的更改-重启后我终于忍受不了,决定写一个脚本来定时程序目录的文件改动,并及时自动重启uwsgi,来解放我的双手可以不用理会这些琐碎的重启工作. 用了点时间来编写了一个脚本用来判断是否更改,然后判断是否需要重启uwsgi.

下面放出脚本内容:

#!/bin/bash
# Author      : cold
# Homepage    : http://www.linuxzen.com
# Filename    : checkchange.sh
# Useage      : sh checkchange.sh [dir]
checkisdir()
        # Have one argument
        # The argument is a directory
        for i in `ls $1 | sed -e 's/ /\n/g'`
        do
                if [ -d $1/$i ]
                then
                        if [ $i == "bin" -o $i == "lib" -o $i == "include" ]   # 不想检测的目录(这里是使用virtualenv生成的环境文件)
                        then
                                continue
                        fi
                        dir="$1/$i"
                        checkisdir $dir
                else
                        files=$files'\n'$1'/'$i
                fi
        done
        echo -e $files
}
while true
do
        if [ -e /tmp/stat.tmp ]
        then
                for i in `checkisdir $1`
                do
                        if [ -e /tmp/patch.tmp ]
                        then
                                stat $i | grep Change > /tmp/nstat.tmp
                                rm -f /tmp/patch.tmp
                                continue
                        fi
                        stat $i | grep Change >> /tmp/nstat.tmp
                done
                diff /tmp/stat.tmp /tmp/nstat.tmp > /tmp/patch.tmp
                if [ $? -eq 0 ]
                then
                        sleep 10
                else
                        /etc/init.d/uwsgi.py restart                    # 将此处更改为想要做的操作
                        patch /tmp/stat.tmp /tmp/patch.tmp
                fi
        else
                for i in `checkisdir $1`
                do
                        stat $i | grep Change >> /tmp/stat.tmp
                done
                continue
        fi
done

这里主要测试变更后重启uwsgi,使用方法:我的bottle程序在/code/python下:

sh checkchange.sh /code/python &

如果使用svn可以参考下面代码:

#!/bin/bash
# Author        : cold
# Homepage      : http://www.linuxzen.com
# Filename      : checkupdate.sh
# Describle     : To Check update of svn

while true
do
        cd /code/python
        svn up | grep At > /dev/null 2>&1
        if [ $? -eq 0 ]
        then
                sleep 30
        fi

        svn up | grep Updated > /dev/null 2>&1
        if [ $? -eq 0 ]
        then
                /etc/init.d/uwsgi.py restart
        fi
done

Category: shell Tagged: 检测 文件 实时 变更 uwsgi shell python Linux bottle

comments


Linux一些比较实用的小技巧

Mon 20 February 2012

在Linux中各种各样的小技巧可以帮助我们更好更快的完成我们的工作,下面就介绍一些我所知道的小技巧

文件查找

找出最近修改的文件:

find / -ctime 1 # 找出根下最近24小时修改过inode信息的文件(更改权限)
find / -mtime 1 # 找出根下最近24小时修改过的文件(内容)
find / -atime 1 # 找出根下最近24小时访问过的文件

使用通配符查找文件

find / -name "*.log" # 找出根下以log为后缀的文件,这里必须要加双引号,不然会报错,因为找的是多个文件,需要用双引号引起来

文本替换

sed -e '2s/ext3/ext4/' /etc/fstab # 将第二行的ext3改成ext4

显示指定行

sed -n "3p" /etc/fstab         # 显示第3行
sed -n "3,5p" /etc/gfstab  # 显示第3到5行 …

Category: shell Tagged: 命令 sz ssh上传下载 shell sed rz lrzsz Linux find awk

comments

Read More

编写Linux shell脚本来实现nginx日志分割

Fri 17 February 2012

nginx的accss日志每天都会产生大量的日志,不过不进行切割会使查看日志变得异常艰难,这里编写一个脚本结合crond来实现nginx的日志切割,切割的格式为日志后缀的数字越小表示离当前日期越近,比如access.log.2存放的内容要比access.log.1的内容要早.

好了,废话不多说,脚本内容如下:

#!/bin/sh
# Author   : cold night
# Filename : nglogcut.sh
export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LogPath='/usr/local/nginx/logs/access.log'    # 定义日志绝对路径 …

Category: shell Tagged: 日志 分割 shell nginx log Linux cut

comments

Read More

Linux shell脚本调试技巧

Tue 17 January 2012

有时候shell脚本不会给予明显的调试信息,而且有时不报错,但是脚本没有达到预期的效果这时候脚本调试就可以帮你准确定位错误.

在脚本的最顶部加上

set -x

开启调试 在脚本的最底部加上

set +x

关闭调试 如果在终端界面下,调试信息过多,调试信息是无法重定向到文件的,所以该怎样查看调试呢,当然这对SecureCRT连接的当然不是问题,但是如果是终端界面的话,可以使用命令

 

script

然后执行要捕捉内容的命令,完成后通过

exit

退出,当前目录下会生成typescript,通过

more typescript

查看调试命令.

Category: shell Tagged: 调试 技巧 shell Linux

comments

Read More
Page 1 of 1

Fork me on GitHub