2013-04-23 55 views
0

我有一個位於服務器上的可執行文件。 許多用戶可以使用SSH登錄到此服務器並執行二進制文件。爲多個用戶鎖定可執行文件

我想獨家訪問執行這個二進制文件的每個用戶。 如果可能的話,我想有一個用戶隊列,這將被逐一服務。

是否有可能使用bash腳本來做到這一點?

假設我打電話給我的二進制文件爲my.exec,腳本文件爲access.sh。 我可以保證每個用戶只能通過access.sh訪問my.exec。 因此,在這個可執行文件上編寫一個包裝將會很容易。

此外,可執行文件需要提供可變參數。

我這裏有一個部分解決方案 -

#!/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

檢查How to prevent a script from running simultaneously?。例如

否則,您可以手動檢查文件,如果該文件不存在,請創建它並繼續。然後在完成所有操作後刪除文件。但這並非真正安全。可以有併發的嘗試和檢查可能會失敗

更新:

我有一個鏈接分享,我看到了它的某個時候回來,花了一點時間來挖掘。但我沒有檢查過它。似乎在快看很好,但請測試正常,如果你使用這個

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

+0

我覺得這是答案的一部分。但是,我不明白我如何維護一個請求隊列。 – Raj 2013-04-23 16:30:27

+0

我不太確定您在多用戶環境中提供的解決方案。 – Raj 2013-04-25 08:26:05

相關問題