SGE&x2B;sqlite3:错误:数据库已锁定
我正在尝试运行一个在集群(SGE)中使用sqlite3的脚本 脚本使用创建锁,填充数据库并释放锁SGE&x2B;sqlite3:错误:数据库已锁定,sqlite,locking,cluster-computing,sungridengine,Sqlite,Locking,Cluster Computing,Sungridengine,我正在尝试运行一个在集群(SGE)中使用sqlite3的脚本 脚本使用创建锁,填充数据库并释放锁 $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 /com
$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
从所有节点都可以看到/common/data//common/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错误
在SGE方面,你有什么想法,什么建议可能是问题的原因,这种行为差异
多谢各位
皮埃尔
更新:
我已以root用户身份登录群集的一个节点。以下简单命令失败:
(/common/data/stats2.sqlite不存在)
它在~root中工作:
[root@node02 ~]# sqlite3 stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);'
[root@node02 ~]#
从我在SGE上所做的测试来看,
lockfile
似乎无法在集群上工作。不过,似乎有效的是在中介绍的一个简单的mkdir
锁
使用
lockfile
,sge测试文件中报告的日期彼此非常接近。exec节点上的/common/data是NFS挂载吗
您可能会在GridEngine设置中看到SQLite“Error:database is locked”消息的一个原因是,SQLite希望使用fcntl锁,除非您同时在客户端和服务器上运行lockd,否则它在NFSv3上无法正常工作
我经常遇到这种情况,到目前为止,我所看到的每种情况都是在每个集群节点上启用lockd(或rpc.lockd,或nfslock,等等,取决于您的环境)服务,为共享文件系统提供服务的任何机器都将解决此问题。I in{1..10}中的
是否会发生错误;do test.sh&done
?@choroba,我已经运行了循环,在stderr上没有错误。@Pierre:你用(日期;主机名)
而不是sqlite3
来验证lockfile
是否真的有效了吗?我已经更新了我的问题,这是sqlite的问题,不是lockfile的问题
[root@node02 ~]# sqlite3 stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);'
[root@node02 ~]#
#!/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