如何防止shell脚本的多个实例?

时间:2014-09-05 10:27:34

标签: linux shell flock

使用centos5 下面是我的shell脚本。我想从多个实例中阻止它..但是如果我冷静下来它就不会起作用#9; kill -9"选项。我也怀疑它会在重启时起作用。 无论如何应用这个逻辑?哪个也可以处理kill -9或者重启或者导致手动退出脚本的任何信号?

[root @ manage aaa] #cat script.sh

#!/bin/sh
set -e

scriptname=$(basename $0)
pidfile="/var/run/${scriptname}"

# lock it
exec 200>$pidfile
flock -n 200 || exit 1
pid=$$
echo $pid 1>&200

#### SCRIPT CODE

2 个答案:

答案 0 :(得分:1)

尝试使用flock命令。从手册页:

(
  flock -n 9 || exit 1
  # ... commands executed under lock ...
) 9>/var/lock/mylockfile

答案 1 :(得分:0)

您可以使用此逻辑解决此问题。

开始锁定

验证,是否被锁定?没有继续,或停止......

我的剧本。

#!/bin/bash

LOCK=/var/run/redundancia.lock
LOG=/var/log/redundancia.log

#----------------------------------------------------------------

control_c () {
        echo -e "\nScript stoped:  `date +%d/%m/%Y%t%T`" >> $LOG
        rm $LOCK &>/dev/null
        exit 0
}

trap control_c INT HUP TERM

if [ ! -f $LOCK ]
then
    touch $LOCK 
# Your code....
else
    echo "This script is running"
    exit 0
fi

抱歉我的英文不好; /