源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

防止shell脚本重复执行的代码

  • 时间:2022-03-13 17:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:防止shell脚本重复执行的代码
例如,要求脚本只能顺序访问某个资源,例如磁盘文件等,就可以参考下面的实现。
[u]复制代码[/u] 代码如下:
#!/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
防止脚本多次执行(一)
[u]复制代码[/u] 代码如下:
while [ `ps x |grep -v grep|grep filename.sh|wc -l` -gt 0 ]; do         exit done
把内容放在脚本最上面 filename.sh 替换为你要监控的脚本名字 还有一种方法是 死循环 可以根据不同的环境,不同的脚本内容,使用的方法也同步,方法很简单日后在写出来
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部