2012-11-23 173 views
2

我試圖運行在集羣中使用sqlite3的腳本(SGE)。SGE + sqlite3:錯誤:數據庫被鎖定

該腳本創建與lockfile鎖,填充數據庫,並釋放鎖。

$cat test.sh 

    #!/bin/sh 
    lockfile /commun/data/_tmp.idp448.lock 
    sqlite3 /commun/data/stats.sqlite "create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);" 
    rm -f /commun/data/_tmp.idp448.lock 
    whoami 

/commun/data /從所有節點都可見。 /commun/data/_tmp.idp448.lock是我創建的一個隨機名,我目前是唯一使用我們的新羣集的名稱。

沒有的qsub腳本工作沒有任何問題:

[lindenb]$ sh test.sh 
    lindenb #prints whoami, no error on stderr 

的qsub被調用:

$ qsub -cwd -S /bin/sh test.sh 
    Your job 673 ("test.sh") has been submitted 

    $ cat test.sh.o673 
    lindenb #prints 'whoami', so the lock have been created and deleted 


    $ cat test.sh.e673 
    Error: database is locked 

這是一個sqlite3的錯誤。

你有什麼想法,什麼樣的建議,在上海黃金交易所方面,可能是問題的原因,行爲的這種差異?

謝謝 皮埃爾

UPDATE:

我超級用戶身份登錄集羣的節點上。簡單以下命令失敗: (/commun/data/stats2.sqlite不存在)

ssh [email protected] 
[email protected]'s password: 
sqlite3 /commun/data/stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);' 
Error: database is locked 

它工作在〜根:

[[email protected] ~]# sqlite3 stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);' 
[[email protected] ~]# 
+0

錯誤是否發生在{for {1..10}中的i中;做test.sh&完成「? – choroba

+0

@choroba,我已經運行了循環,stderr上沒有錯誤。 – Pierre

回答

1

從我對我們的SGE做了測試,看來lockfile不能在集羣上運行。然而,似乎有效的是在bash-hackers處描述的簡單的mkdir鎖。

#!/bin/sh 
DIR=/commun/data/ 
LOCK=$DIR/_tmp.idp448.lock 
until mkdir $LOCK ; do 
    sleep 4 
done 
(date ; hostname) >> $DIR/sge-test 
rmdir $LOCK 
whoami 

隨着lockfile,在SGE-測試文件報告的日期非常接近對方。

+0

lockfile在這裏工作,問題來自sqlite – Pierre

+0

@Pierre:你是否用'(date; hostname)'而不是'sqlite3'來試驗你的腳本來驗證'lockfile'真的起作用? – choroba

+0

我更新了我的問題,這是一個問題與SQLite,而不是lockfile – Pierre

1

/exec/data在你的exec節點上掛載NFS嗎?

您可能很有可能在GridEngine設置中看到SQLite「錯誤:數據庫已鎖定」消息的一個原因,該設置通常會有很多節點通過NFS寫入共享文件系統,SQLite希望使用fcntl鎖, 不能通過NFSv3正常工作,除非您在客戶端和服務器上運行鎖定。

我遇到了很多問題,並且在任何情況下,我都已經看到,只是在每個集羣節點上啓用lockd(或rpc.lockd或nfslock等,具體取決於您的環境)服務以及任何機器正在服務共享文件系統將解決問題。