Como bloquear no Solaris 10?

4

No Linux eu uso flock lock command para executar um comando com um bloqueio exclusivo.

Qual é o comando padrão do sistema operacional do Solaris 10 para fazer o mesmo em um shell?

    
por ceving 11.05.2011 / 16:01

3 respostas

2

Após uma pequena discussão da Usenet , uso o seguinte como solução alternativa para flock -n lockfile -c command :

#! /bin/bash

if [ $# != 4 -o "$1" = '-h' ] ; then
   echo "Usage: flock -n lockfile -c command" >&2
   exit 1
fi

lockfile=$2
command=$4

set -o noclobber
if 2>/dev/null : > "$lockfile" ; then
   trap 'rm -f "$lockfile"' EXIT
   $BASH -c "$command"
else
   exit 1
fi
    
por 13.05.2011 / 13:49
4

Não há flock ou comando semelhante para o Solaris. Se eu quiser fazer um bloqueio simples eu uso mkdir como uma operação atômica e evita possíveis condições de corrida com a combinação usual de arquivo de verificação / toque.

if ! mkdir /tmp/lockdir >/dev/null 2>&1
then
    echo >&2 "Lock exists exiting"
    exit 1
fi
    
por 11.05.2011 / 22:23
0

Eu combinaria as duas ideias:

getLock() {
    PROG=$( basename $0 )
    SHAREDLOCK="/tmp/lockdir-$PROG"

    if mkdir "$SHAREDLOCK" >/dev/null 2>&1
    then
            trap 'rmdir "$SHAREDLOCK"' EXIT
            chmod 0 "$SHAREDLOCK" # discourage anyone from messing with it else the rmdir might fail
    else
            echo >&2 "Lock ($SHAREDLOCK) exists. exiting"
            exit 1
    fi

}

    
por 14.08.2013 / 03:13