锁定多个用户的可执行文件

时间:2013-04-23 16:16:29

标签: bash locking

我在服务器上有一个可执行文件。 许多用户可以使用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

由于

1 个答案:

答案 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