我希望我的脚本运行单例,我指的是flock,除了debian 7.11之外,脚本运行良好。
当我在docker debian 7.11中运行时,出现以下错误: 羊群:./single.sh文本文件忙
我下载了debian 9,它运行良好,如果不能解决,我必须尝试另一种方法使脚本单例运行。
我想知道是否有办法解决这个问题。
#!/bin/bash
# singleton exec
[ "${EDR_FLOCKER}" != "$0" ] && exec env EDR_FLOCKER="$0" flock -eno "$0" "$0" "$@" || :
echo "Helloworld"
sleep 20
答案 0 :(得分:1)
我找到了失败的原因,flock的参数不能是脚本自身。 修改脚本,如下所示,一切正常。
#!/bin/bash
# singleton exec
[ "${EDR_FLOCKER}" != "$0" ] && exec env EDR_FLOCKER="$0" flock -eno "$0.lock" "$0" "$@" || :
echo "Helloworld"
sleep 20
答案 1 :(得分:0)
要覆盖此错误,您可以从脚本 chmod -w script.sh
中调用写入权限,或者如果它应该从根 chattr +i script.sh
运行,则使其不可变。