bash - 防止多实例同时运行脚本¶
使用文件锁,并且使用trap使得程序在任何时候崩溃退出都能unlock文件锁
#!/bin/bash
LOCKFILE="/var/lock/lockname.lock"
LOCKFD=99
# PRIVATE
_lock() { flock -$1 $LOCKFD; }
_no_more_locking() { _lock u; _lock xn && rm -f $LOCKFILE; }
_prepare_locking() { eval "exec $LOCKFD>\"$LOCKFILE\""; trap _no_more_locking EXIT; }
# ON START
_prepare_locking
# PUBLIC
exlock_now() { _lock xn; } # obtain an exclusive lock immediately or fail
exlock() { _lock x; } # obtain an exclusive lock
shlock() { _lock s; } # obtain a shared lock
unlock() { _lock u; } # drop a lock
### BEGIN OF SCRIPT ###
# Simplest example is avoiding running multiple instances of script.
exlock_now
if [ $? -ne 0 ]; then
echo "Other user is running this script, please try again later!"
exit 1
fi
# 脚本正文