Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何防止shell脚本的多个实例?_Linux_Shell_Flock - Fatal编程技术网

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

Linux 如何防止shell脚本的多个实例?,linux,shell,flock,Linux,Shell,Flock,使用centos5 下面是我的shell脚本。我想阻止它从多个实例。。但是如果我选择了“kill-9”选项,它就不起作用了。另外,我怀疑它在重启时会起作用。 是否有必要应用这种逻辑?哪个还可以处理kill-9、重新启动或任何导致手动退出脚本的信号 [root@manageaaa]#cat script.sh #!/bin/sh set -e scriptname=$(basename $0) pidfile="/var/run/${scriptname}" # lock it exec 20

使用centos5 下面是我的shell脚本。我想阻止它从多个实例。。但是如果我选择了“kill-9”选项,它就不起作用了。另外,我怀疑它在重启时会起作用。 是否有必要应用这种逻辑?哪个还可以处理kill-9、重新启动或任何导致手动退出脚本的信号

[root@manageaaa]#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

你可以用这个逻辑来解决这个问题

打开锁 验证是否已锁定?没有继续,或停止。。。 我的剧本

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

对不起,我的英语不好/

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

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

该代码仍然包含一个争用条件,因为您已经将文件的测试与创建分离了。(flock-n9 | | | exit 1#…在lock下执行的命令…sleep30)9>/var/lock/mylockfile我已经尝试了上面的脚本。但是,如果我使用“kill-9”杀死它,我就不可能在30秒前再次执行脚本。括号开始一个子shell,您也需要杀死它。(kill-9无论如何都不应该是您的正常操作模式,但这只是我个人的观点。)是的,我已经杀死了这两个进程。它将在重新启动或不正确退出时工作,而不是杀死-9?