0

我有一个在服务器上的可执行文件。许多用户可以使用 SSH 登录到该服务器并执行二进制文件。

我希望对执行此二进制文件的每个用户拥有独占访问权限。如果可能的话,我希望有一个用户队列,将被一个一个地服务。

是否可以使用 bash 脚本来执行此操作?

假设我将我的二进制文件称为 asmy.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

谢谢

4

1 回答 1

1

检查如何防止脚本同时运行?. 例如

否则,您可以手动检查文件,如果该文件不存在,请创建它并继续。然后在一切完成后,删除文件。但这并不是真正安全的。可能有并发尝试,检查可能失败

更新:

我有一个链接要分享,我以前看到过,花了一点时间来挖掘。但我没有检查过。快速查看似乎很好,但如果你使用它,请正确测试

http://gotmynick.github.io/articles/2012/2012-05-02-file_locks_queues_and_bash.html

于 2013-04-23T16:27:44.107 回答