Semaphore thinks lock file already exists

179 Views Asked by At

I'm using link to create a semaphore - the idea is to lock out of writing to a db.

Here I have a script to create a table in a database:

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

Here's my P file:

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

and my V:

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

let's say I create a table by running ./create_table people footballers age,height

This should create a file footballers.lock (created by P) and then once the writing has happened the V should remove it. But for some reason the P thinks that the .lock file already exists, and it definitely doesn't.

Can anyone spot what's going wrong?

1

There are 1 best solutions below

0
On

Found it - you can't use ln on directories...