linux shell命令循环执行,防止shell脚本重复执行的代码

例如,要求脚本只能顺序访问某个资源,例如磁盘文件等,就可以参考下面的实现。

#!/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

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

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

防止脚本多次执行(一)

while [ `ps x |grep -v grep|grep filename.sh|wc -l` -gt 0 ];

do

exit

done

把内容放在脚本最上面

filename.sh 替换为你要监控的脚本名字

还有一种方法是 死循环 可以根据不同的环境,不同的脚本内容,使用的方法也同步,方法很简单日后在写出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值