1
flock
を使用して、一度に1つのスクリプトインスタンスしか実行できないようにしています。ほとんどの場合、これはうまくいくようです。しかし、私がログアウトすると(私はi3wmを使用します)、またはPCがリブートされると、ロックは解放されません。次回のログイン時にはロックファイルが存在し、新しいロックを取得できないためにスクリプトが開始されません。ログアウト/再起動時にflockが解放されない
ご覧のとおり、私はすでにtrap
でプロセスの終了時にロックを解除しようとしましたが、それは役に立ちません。
私はflock
を間違って使用していますか、他に何か不足していますか?プロセスが終了するとロックが解除されるべきだという印象を受けていたので、ログアウト/再起動が必要になります。
LOCK_FILE="${HOME}/.my_script.lock"
release_lock() {
# This shouldn't be necessary but it seems
# the lock doesn't release on i3 exit
rm "${LOCK_FILE}"
}
(
if [[ -n $LOGFILE ]]; then
exec >>"$LOGFILE" 2>&1
fi
flock -xn 200 || { show_message "$(basename ${0}): cannot acquire lock ${LOCK_FILE}"; exit 3; }
trap release_lock EXIT
# Call the main function (not included in this snippet)
main 200>&-
) 200>"${LOCK_FILE}"
答えてくれてありがとう、私は実際にログアウト時にロックを解除するためにtrap/release_lockが必要だと思われますが、 '--unlock'を使うと正しくロックを再設定しているようです。私はこの質問を "回答"に設定する前にこれをテストします。 – rje