信号量认为锁定文件已存在

时间:2018-11-22 15:47:13

标签: bash semaphore ln

我正在使用链接来创建信号灯-这个想法是为了防止写入数据库。

这里有一个脚本可以在数据库中创建表:

#!/bin/bash


if [ "$#" -lt 3 ]; then
    echo "Not enough parameters"
    exit 1
elif [ "$#" -gt 3 ]; then
    echo "Too many parameters"
    exit 1
fi


if [ ! -d "$1" ]; then
    echo "That database doesn't exist!"
    exit 1
fi

./P.sh $1
if [ -f "$1/$2.txt" ]; then
    echo "That table already exists!"
    ./V.sh $1
    exit 1
else 
    touch "$1/$2.txt"
fi
./V.sh $1

echo "$3" > "$1/$2.txt"

echo "Ok, table created"

exit 0 

这是我的P文件:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage $0 mutex-name"
    exit 1
elif [ ! -e "$1" ]; then
    echo "Target for the lock must exist"
    exit 2
else
    while ! ln "$1" "$1.lock"; do
        sleep 1
    done
    exit 0
fi

和我的V:

#! /bin/bash
if [ -z "$1" ]; then
    echo "Usage $1 mutex-name"
    exit 1
else
    rm "$1.lock"
    exit 0
fi

假设我通过运行./create_table足球运动员的年龄,身高

来创建表格

这应该创建一个文件footballers.lock(由P创建),然后一旦写入发生,V应该将其删除。但是出于某种原因,P认为.lock文件已经存在,并且肯定不存在。

任何人都可以发现问题所在吗?

1 个答案:

答案 0 :(得分:0)

找到它了-您不能在目录上使用ln ...