所以有两个脚本:A和B,都想写入同一个文件。两个脚本都可以同时写入文件。我该如何锁定文件?当脚本A正在写入文件时,脚本B必须等到文件被解锁。
我试过这个: 的 的
的while [ -f $LOCK ]
do
sleep 0.1
done
touch $LOCK
#action
rm $LOCK
的 上面的脚本问题是可能的,A和B都在同时寻找$ LOCK,他们无法开始写作。 有什么帮助吗?
答案 0 :(得分:2)
另一种可能性是:
echo $$ >> lockfile
locked_by=$(head -1 lockfile)
if [ $$ = $locked_by ] ; then
echo "Hurray! the file is mine!"
#do stuff
rm lockfile
else
echo "$locked_by has the lock, sorry"
fi
echo $$ >> lockfile
在大多数情况下都足够原子。
答案 1 :(得分:1)
试试这个:
脚本A是打开的文件,然后设置属性chattr +i test.txt
,脚本A完成后使用chattr -i test.txt
。
例如:
脚本A
chattr +i test.txt
tail -n 50 /var/log/maillog > test.txt
chattr -i test.txt
脚本B
chattr +i test.txt
tail -n 50 /var/log/messages > test.txt
chattr -i test.txt
答案 2 :(得分:1)
您可以使用kill -0
和if
构造。例如:
kill -0 $lockPid
if [[ $? == 0 ]];then
echo "File locked"
break
else
bash script2.sh
fi
答案 3 :(得分:0)
解决方案是使用lockfile
脚本A
while :
do
lockfile test.lock
echo A >> test
rm -f test.lock
sleep 1
done
脚本B
while :
do
lockfile test.lock
echo B >> test
rm -f test.lock
sleep 1
done
您必须在lockfile
和rm
命令之间编写文件,以便编写任何脚本。因此,任何时候只有一个会修改,其余的将等待。您还可以设置超时等,以获取详细信息man locktime