Linux 如何防止shell脚本的多个实例?
使用centos5 下面是我的shell脚本。我想阻止它从多个实例。。但是如果我选择了“kill-9”选项,它就不起作用了。另外,我怀疑它在重启时会起作用。 是否有必要应用这种逻辑?哪个还可以处理kill-9、重新启动或任何导致手动退出脚本的信号 [root@manageaaa]#cat script.shLinux 如何防止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
#!/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?