
私はUbuntu 12.0.4を使用しており、基本的に次のコードを含むスクリプトがあります。
lockfile=/var/tmp/mylock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
/var/tmp/mylock ファイルが私のシステムに存在しないため、スクリプトを手動で実行すると、「実行中のインスタンスがありません」というメッセージが表示されます。これは正しいです。
ただし、cronによってシェルスクリプトが実行されると、常に「インスタンスが実行中です」を返します。
上記の問題の根本原因を見つけるためにどこをチェックする必要があるのか、何を見つけるのかわかりません。ここからいくつかのガイダンスが得られることを願っています。
答え1
通常、ファイルを生成し、ファイルが存在する場合、オペレーティングシステムがファイルを破損しないことを期待するのは、ファイルが存在するかどうかをテストする良い方法ではありません。
あなたはより良いサービスを得るでしょう:
if [ -f $lockfile ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
ただし、ファイルの存在をロックファイルとして使用する場合は、unix lockfileコマンドを使用することをお勧めします。
lockfile -r 0 $lockfile
if [ $? -ne 0 ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi