Используйте lock-файлы.
Как-то так:
#!/bin/bash
DEFAULT_LOCK="/tmp/.somelock"
lock() {
LOCK=${1:-$DEFAULT_LOCK}
lockfile -r 0 $LOCK 1>/dev/null 2>&1
return $?
}
unlock() {
LOCK=${1:-$DEFAULT_LOCK}
[ -f $LOCK ] && rm -f $LOCK
return $?
}
После можно писать:
lock && echo "lock ok test"
lock || echo "lock not ok test"
unlock && echo "unlock ok test"
unlock || echo "unlock not ok test"
И оно будет использовать стандартный lock-файл (удобно когда нужно запустить один скрипт).
В вашем случае можно указать свой lock-файл, для каждого скрипта в зависимости от параметра(-ов):
# $PARAM -- что-то уникальное для каждого из 4 запусков скрипта. Например:
# PARAM=`echo -n "$@" | openssl dgst -sha1 -binary | base64`
LOCK="${DEFAULT_LOCK}_${PARAM}"
if ! lock $LOCK ; then
echo "Locked"
exit 1
fi
# ваши действия
unlock $LOCK