2014-09-05 78 views
0

我想採購一個腳本(它設置變量在我的殼):我可以結合雞羣和來源?

source foo.sh args 

但在羊羣,這樣只有一個實例在同一時間(它做了很多的磁盤訪問我」的工作d喜歡確保序列化)。

$ source flock lockfile foo.sh args 
-bash: source: /usr/bin/flock: cannot execute binary file 

$ flock lockfile source foo.sh args 
flock: source: Success 

不起作用。

有沒有一些簡單的語法,我失蹤了?假設我不能編輯foo.sh以將鎖定命令放入其中。

回答

1

您不能source腳本直接通過flock,因爲它是一個外部命令而source是shell內置。實際上,你卻因爲這樣兩個問題:

  • flock不知道任何命令調用source,因爲它的建成bash
  • 即使flock可以運行它,改變不會影響調用shell的狀態正如你想用source,因爲它發生在一個子進程中。

而且,通過flocksource不會起作用,因爲source預計的腳本。要做你想做的事,你需要用fd來鎖定。下面是一個示例

#!/bin/bash 

exec 9>lockfile 
flock 9 
echo whoopie 
sleep 5 
flock -u 9 

在同一個目錄中同時運行此腳本的兩個實例,您將看到一個等待另一個腳本。

相關問題