クラスター ( 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 ~]#