Solaris 10をロックする方法は?

Solaris 10をロックする方法は?

Linuxでは、flock lock command排他的ロックを使用してコマンドを実行します。

シェルで同じ操作を実行するSolaris 10標準オペレーティングシステムコマンドは何ですか?

答え1

flockSolaris には同様のコマンドはありません。簡単なロックを実行したい場合はmkdirアトミックタスクなので、これを使用してファイルの存在/タッチの組み合わせの一般的な確認を行うことで潜在的な競合状態を回避します。

if ! mkdir /tmp/lockdir >/dev/null 2>&1
then
    echo >&2 "Lock exists exiting"
    exit 1
fi

答え2

しばらくしてニュースグループディスカッション回避策として以下を使用しました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

答え3

私はこれら2つのアイデアを組み合わせます。

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

}

関連情報