我正在尝试运行在集群(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 错误。
您有什么想法或建议,在 SGE 方面,可能是导致该问题的原因,即这种行为差异?
谢谢皮埃尔
更新:
我在集群的一个节点上以 root 身份登录。以下简单命令失败:(/commun/data/stats2.sqlite 不存在)
ssh root@node02
root@node02's password:
sqlite3 /commun/data/stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);'
Error: database is locked
它在 ~root 中工作:
[root@node02 ~]# sqlite3 stats2.sqlite 'create table if not exists timeBeginDB(target text UNIQUE NOT NULL,inserted int);'
[root@node02 ~]#