1
flock
을 사용하여 한 번에 하나의 스크립트 인스턴스 만 실행할 수 있습니다. 대부분의 경우이 기능이 정상적으로 작동하는 것 같습니다. 하지만 로그 아웃 (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'을 사용하면 잠금이 올바르게 relate됩니다. 이 질문을 "대답"으로 설정하기 전에 테스트 해 볼 것입니다. – rje