我在服务器上有一个可执行文件。 许多用户可以使用SSH登录此服务器并执行二进制文件。
我希望对执行此二进制文件的每个用户拥有独占访问权限。 如果可能的话,我希望有一个用户队列,这将逐个提供。
是否可以使用bash脚本执行此操作?
假设我将我的二进制文件称为my.exec
,将脚本称为access.sh
。
我可以保证每个用户只能通过my.exec
访问access.sh
。
因此,在这个可执行文件之上编写一个包装器会很容易。
此外,可执行文件需要提供变量参数。
我在这里有一个部分解决方案 -
#!/bin/bash
# Locking
LOCK_FILE="/tmp/my.lock"
function create_lock_and_execute {
echo "Waiting for Lock"
while [ -f ${LOCK_FILE} ]
do
username=`ls -l ${LOCK_FILE} | cut -f 3 -d " "`
echo $username is using the lock.
sleep 1
done
(
# Wait for lock ${LOCK_FILE} (fd 200).
flock -x 200
echo "Lock Acquired..."
# Execute Command
echo "Executing Command : $COMMAND"
${COMMAND}
) 200>${LOCK_FILE}
}
function remove_lock {
rm -f ${LOCK_FILE}
}
# Exit trap function
function exit_on_error {
echo "Exiting on error..."
remove_lock
exit 1
}
# Exit on kill
function exit_on_kill {
echo "Killed, exiting..."
remove_lock
exit 1
}
# Exit normaly
function exit_on_end {
echo "Exiting..."
remove_lock
exit 0
}
trap exit_on_kill KILL
trap exit_on_error ERR
trap exit_on_end QUIT TERM EXIT INT
create_lock_and_execute
由于
答案 0 :(得分:1)
检查How to prevent a script from running simultaneously?。例如
否则,您可以手动检查文件,如果该文件不存在,则创建该文件并继续。完成所有操作后,删除该文件。但这并不是真正的安全。可能会有并发尝试,但检查可能会失败
更新
我有一个分享的链接,我在某个时候看到它,花了一点时间来挖掘。但我没有检查过它。快速查看似乎很好,但是如果你使用这个
请正确测试http://gotmynick.github.io/articles/2012/2012-05-02-file_locks_queues_and_bash.html