2012-11-23 144 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等,具体取决于您的环境)服务以及任何机器正在服务共享文件系统将解决问题。