shell脚本实现实时检测文件变更

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

下面放出脚本内容:

#!/bin/bash
# Author   : cold
# 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
# 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
(0)

相关推荐

  • shell脚本实现实时检测文件变更

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

  • shell脚本实现定时删除文件或文件夹

    一.删除XX天(默认10天)之前某个目录下面带.log的日志文件,并且输出文件显示删除的文件 #!/bin/sh #如果没有输入变量值,默认天数为10 start=$(date +%y-%m-%d-%H%M%m) File=/temp/delete_$start.txt FilePath=/data echo $File if [ ! -n "$1" ]; then     day=10 else      day=$1 fi #-mtime 10 表示文件修改时间距离当前为0天的文件

  • Shell脚本监控目录内文件改动

    废话不多说了,直接给大家贴代码,具体代码如下所示: #! /bin/bash webroot="/home/www/" cp /dev/null rsync_file if [ ! -f file.md5 ];then find $webroot -type f -exec md5sum {} \; >>file.md5 else for file in $(md5sum -c file.md5|awk -F':' '/FAILED/{print $1}') do if [

  • 解决Centos7下crontab+shell脚本定期自动删除文件问题

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任务 1.创建shell文件 [root@zabbix script]# vim backup_sql_clean.sh #!/bin/sh find /data1/backup/KDKDA\$AGKDPAYKT/XNAKSD/FXUIJ -mtime +10 -name "*.bak" -

  • shell脚本for循环实现文件和目录遍历

    一个for循环实现一个目录下的文件和目录遍历,很实用 [root@localhost shell_order]# cat test27.sh #!/bin/bash #print the directory and file for file in /home/hustyangju/* do if [ -d "$file" ] then echo "$file is directory" elif [ -f "$file" ] then echo

  • shell脚本如何读取properties文件中的值

    如下面代码所示的properties文件是各种编程语言中常用的属性文件,通过key读取value是极其常见的需求. # 端口 server.port=8520 # 上传文件总的最大值 spring.servlet.multipart.max-request-size=10MB # 单个文件的最大值 spring.servlet.multipart.max-file-size=10MB Linux中的shell通常是需要程序员自己写一个方法实现对properties文件的读取.以下是我写的一个方法

  • 一个强大的网络分析shell脚本分享(实时流量、连接统计)

    介绍一个强大的分析网络的shell脚本,此脚本是从EZHTTP拆分出来的,觉得有必要单独介绍下. 脚本运行效果截图: 此脚本包含的功能有: 1.实时监控任意网卡的流量 2.统计10秒内平均流量 3.统计每个端口在10秒内的平均流量,基于客户端和服务端端口统计.可以看出哪些端口占流量比较大,对于web服务器,一般是80端口.其它端口受到攻击时,也有可能其它端口流量比较大.所以此功能可以帮助我们端口流量是否正常. 4.统计在10s内占用带宽最大的前10个ip.此项功能可以帮助我们来查出是否有恶意占用

  • Shell脚本实现批量替换文件内容

    今天同事发现内部服务器的硬盘空间不够了,上面有很多备份,我又不能删除,重新找了个320g的硬盘挂载了上,想以后shell脚本下的备份都转移到新硬盘上,给老硬盘腾出空间来,原备份路径是/data/onlinesqlbak/,新备份路径是/disk2/onlinesqlbak/,我find了下备份shell脚本,这一找吓死个人,最少都有10-20个备份shell要改,谁叫我是懒人想一下搞定完,好了来看我的解决办法吧. 系统:centos 5.x 1.先确认有那些脚本要改 复制代码 代码如下: fin

  • Shell脚本实现自动检测修改最快的Ubuntu软件源

    每次装好Ubuntu,对于大多数用户来说,首先要做的事就是手动修改/etc/apt/sources.list文件,将里面的官方软件源地址更换为自己学校或者公司的软件源.当我们更换一个工作环境后,可能伴随着又要替换旧的软件源地址. 笔者觉得这样每次手动更改软件源是一件及其麻烦重复的劳动,于是编写了一个自动更新最快软件源的脚本,从此一劳永逸. 原理 最直观的想法就是:对各个软件源进行测速,选出最快的那个,之后将其替换为新的软件源. 那么如何对各个软件源测速呢?有两种方法: 一.用ping命令 测量其

  • Shell脚本一次读取文件中一行的2种写法

    写法一: 复制代码 代码如下: #!/bin/bash while read line do       echo $line     #这里可根据实际用途变化 done < urfile 写法二: 复制代码 代码如下: #!/bin/bash cat urfile | while read line do     echo $line done 注意:以上代码中urfile 为被读取的文件 Shell读取文本文件 方法一:通过命令获取所需内容,传递给变量 复制代码 代码如下: var1=$(g

随机推荐