flock 未在 logout/reboot 上发布
flock doesn't get released on logout/reboot
我正在使用 flock
来尝试确保我的脚本一次只能 运行 一个实例。大多数时候这似乎工作正常;但是当我注销(我使用 i3wm)或者当 PC 重新启动时,锁没有被释放;下次登录时,锁文件仍然存在,脚本无法启动,因为它无法获取新锁。
如您所见,我已经尝试 trap
释放进程退出时的锁定,但这没有帮助。
我是在错误地使用 flock
还是遗漏了什么?我的印象是进程结束时应该释放锁,所以应该包括 logout/reboot.
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 [=11=]): 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}"
不要删除文件;让持有文件打开的进程退出。
(
if [[ -n $LOGFILE ]]; then
exec >>"$LOGFILE" 2>&1
fi
flock -xn 200 || { show_message "$(basename [=10=]): cannot acquire lock ${LOCK_FILE}"; exit 3; }
main
) 200>"${LOCK_FILE}"
当main
存在时,打开$LOCK_FILE
的子shell也将退出,锁也将被删除。
如果要显式释放锁定,请使用 flock --unlock 200
而不是删除文件。
我正在使用 flock
来尝试确保我的脚本一次只能 运行 一个实例。大多数时候这似乎工作正常;但是当我注销(我使用 i3wm)或者当 PC 重新启动时,锁没有被释放;下次登录时,锁文件仍然存在,脚本无法启动,因为它无法获取新锁。
如您所见,我已经尝试 trap
释放进程退出时的锁定,但这没有帮助。
我是在错误地使用 flock
还是遗漏了什么?我的印象是进程结束时应该释放锁,所以应该包括 logout/reboot.
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 [=11=]): 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}"
不要删除文件;让持有文件打开的进程退出。
(
if [[ -n $LOGFILE ]]; then
exec >>"$LOGFILE" 2>&1
fi
flock -xn 200 || { show_message "$(basename [=10=]): cannot acquire lock ${LOCK_FILE}"; exit 3; }
main
) 200>"${LOCK_FILE}"
当main
存在时,打开$LOCK_FILE
的子shell也将退出,锁也将被删除。
如果要显式释放锁定,请使用 flock --unlock 200
而不是删除文件。