shell脚本是防止多次运行

原创 2013年12月06日 10:43:06
#!/bin/bash
#
# file locking using bash.
# ver 0.1.6
#
# author : malundao ( malundao@sina.com )
# date   : 2011-08-31   
# ref    : http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2005-09/0472.html
#
# note:
#   shflock_cleanhook() is a user defined function to clean up user-specific sth.
#
# /path/to/lock/. note; directory, not a file.
# should be modified 
LOCKPATH="/tmp"
cleanup() {
        shflock_cleanhook
        cd $LOCKPATH
        [ -e lock.pid ] || exit
        read pid >/dev/null 2>&1 <lock.pid
        if [ -n "$pid" ]; then
            if [ "$pid" == "$$" ]; then
                rm -f lock.$pid
                rm -f lock.pid
                exit 
            fi  
        fi  
        exit
}
#  trap EXIT ? 
trap 'cleanup' HUP INT TERM
getlock() {
        oldpath=`pwd`
        cd $LOCKPATH
        while
                echo $$ > lock.$$
                [ -e lock.pid ] 
        do
                rm lock.$$
                read pid >/dev/null 2>&1 <lock.pid
                if [ -n "$pid" ]; then
                        if [ -e /proc/$pid ]; then
                                cd $oldpath
                                return 1 # Lock is taken by others
                        else
                                #unsafe: rm -f lock.$pid
                                echo WARN: please delete stale lock.pid by HAND.
                                return 2
                        fi
                else
                        # sleep some seconds,then back to 'while' loop
                        # 11 is a prime number, $$ as a random.  
                        echo sleep $(( $$ % 11 ))
                        sleep $(( $$ % 11 ))
                fi
        done
        # 'ln -s' is an atom op. 
        ln -s lock.$$ lock.pid >/dev/null 2>&1
        if [ $? -eq 0 ]; then
                cd $oldpath
                return 0 # We got the lock
        else
                [ -e lock.pid ] || echo WARN: please delete hanging lock.pid by HAND.
                cd $oldpath
                return 3 # Lock is probably taken by others.
        fi
}
putlock () {
    oldpath=`pwd`
    cd $LOCKPATH && rm -f lock.$$ lock.pid
    cd $oldpath
}
## test 
shflock_cleanhook() {
    echo i\'m a hook.
}
while true; do
    while ! getlock; do
        #echo wait a second...
        sleep 1
    done
    echo \[$$\] `date` ,now hold lock for 3 seconds...
    sleep 3
    #echo putlock
    putlock
    sleep 1 # yield
done

Linux中如何防止一个Shell脚本被重复执行?

Linux 中Shell 脚本如何防止重复运行的方案实现
  • timchen525
  • timchen525
  • 2017年07月30日 21:39
  • 879

如何避免shell脚本被同时运行多次

转自:http://www.etwiki.cn/linux/2786.html 比如说有一个周期性(cron)备份mysql的脚本,或者rsync脚本, 如果出现意外,运行时间过长, 很...
  • sg656720274
  • sg656720274
  • 2017年06月22日 15:13
  • 646

如何防止程序多次运行

http://www.cnblogs.com/zhili/p/OnlyInstance.html [C# 开发技巧]如何防止程序多次运行 一、引言 最近发现很多人在论坛中问到如何...
  • happywwh
  • happywwh
  • 2013年10月03日 01:29
  • 800

hbase的shell脚本是通过ruby实现的

hbase中的shell命令是通过ruby实现的,所有的命令都在 hbase-0.92.1-cdh4.1.2\src\main\ruby 目录下面,在shell中通过hbase shell启动...
  • zj360202
  • zj360202
  • 2013年03月20日 17:39
  • 846

防止程序多次运行

一、引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c...
  • w998179
  • w998179
  • 2013年11月19日 18:15
  • 504

Linux:shell脚本反复运行同一个程序

描述:写了一个检测脚本 运行ffmpeg程序  当程序运行结束后 继续运行该ffmpeg程序。     思路:起初想要持续检测正在运行的进程,如果进程正在进行就什么也不做,该进程结束就重启该进程。写的...
  • cfqcfqcfqcfqcfq
  • cfqcfqcfqcfqcfq
  • 2017年02月13日 10:52
  • 883

C#如何防止程序多次运行的技巧

http://www.aspku.com/kaifa/cjc/131414.html 一、引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如:  http://s...
  • u011981242
  • u011981242
  • 2016年05月07日 15:50
  • 1855

解决问题:阻止ie浏览器总是显示“脚本通常是安全的,是否允许运行脚本”

问题:ie浏览器总是显示“脚本通常是安全的,是否允许运行脚本” 解决方法1:         解决方法2:   ie的工具-internet选项-安全-internet-自定义级别,把脚本下的提示...
  • xiuping05214
  • xiuping05214
  • 2013年12月05日 15:12
  • 5603

【shell】防止脚本重复运行

有些业务脚本需要防止重复,以便造成业务数据不一致。 所以,一般在脚本运行开始,就首先要检查当前系统是否有该脚本的运行进程。 一般人多半是这样写的(比如我们系统里的那帮人):...
  • q3dxdx
  • q3dxdx
  • 2015年10月22日 14:12
  • 992

Shell脚本——su、sudo

· su su命令临时切换到root用户; su [option] [用户] 其中, -后接用户名,表示登录并切换到用户环境; -c后接命令,表示执行该命令再退出所切换的用户环境; ...
  • twc829
  • twc829
  • 2017年06月12日 17:59
  • 412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell脚本是防止多次运行
举报原因:
原因补充:

(最多只允许输入30个字)