Relionからジョブ管理システムOpenPBSにジョブを投入すると失敗します.
OpenPBSのバージョンにも寄りますが、v19.1.1以降はダメみたい.
大丈夫なのは 14.1.2 と 18.1.4

原因はOpenPBSがジョブ名称[-N]に「/(スラッシュ)」を含むと「変な文字がありますよ」ってエラーにするため.

Relionの「Running」タブで「Queue submit command」でジョブ名称を上書きするように
「qsub -N 2DClass」
と記載すれば回避されます.
2020y12m28d_071139390.png

っが面倒くさい.
ならqsub.shの「#PBS -N XXXnameXXX」を「#PBS -N relion_job」として名称を統一するのも宜しいかと.

...何のジョブを走らせているかが不明で困る...

ならrelionのソースを書き換えるかになる.

っで作ってみた

OpenPBS向け改修

注意
問題が起こっても責任持ちません.


qsub.shの「XXXnameXXX」には下記のようにRelionによって下記のように書き換わります.
Class2D/job030/
と「/(スラッシュ)」の文字が2つ入ります. ジョブ項目とjob番号の間に1つ. 末尾に1つ.

っでこの始めの「/(スラッシュ)」文字を「.(ドット)」に代えて、末尾の「/(スラッシュ)」文字は削除するようにしてみた

関数を作ればいいのでしょうが、変更箇所を少なくしたいので泥臭い方法でしてます.

diff --git a/src/pipeline_jobs.cpp b/src/pipeline_jobs.cpp
index 46c54b5..e74a2aa 100644
--- a/src/pipeline_jobs.cpp
+++ b/src/pipeline_jobs.cpp
@@ -550,12 +550,14 @@ bool RelionJob::saveJobSubmissionScript(std::string newfilename, std::string out
                fh.seekg(0, std::ios::beg);
                std::string line;
                std::map<std::string, std::string> replacing;
+               std::string dot = ".";
+               std::string jobname = outputname.replace(outputname.find("/"),1, dot);
                replacing["XXXmpinodesXXX"] = floatToString(nmpi);
                replacing["XXXthreadsXXX"] = floatToString(nthr);
                replacing["XXXcoresXXX"] = floatToString(ncores);
                replacing["XXXdedicatedXXX"] = floatToString(ndedi);
                replacing["XXXnodesXXX"] = floatToString(nnodes);
-               replacing["XXXnameXXX"] = outputname;
+               replacing["XXXnameXXX"] = jobname.substr( 0, jobname.length() - 1);
                replacing["XXXerrfileXXX"] = outputname + "run.err";
                replacing["XXXoutfileXXX"] = outputname + "run.out";
                replacing["XXXqueueXXX"] = joboptions["queuename"].getString();

これでジョブ名称[-N]は「Class2D.job038」とかになります.

問題点...ジョブ管理システムで発生した標準出力、標準エラーの取り扱い....

openPBSを直すなら

Relionはそのままでジョブ管理システムOpenPBSを修正するなら

まずgitでソースコードを拾って、最新版v20.0.1(2021.01時点)に移り

git clone https://github.com/openpbs/openpbs
cd openpbs
git checkout -b v20.0.1 refs/tags/v20.0.1

エラーと指摘される判断部分(src/lib/Libcmds/ck_job_name.c)に手を加える

diff --git a/src/lib/Libcmds/ck_job_name.c b/src/lib/Libcmds/ck_job_name.c
index decfc3c..fbd54f5 100644
--- a/src/lib/Libcmds/ck_job_name.c
+++ b/src/lib/Libcmds/ck_job_name.c
@@ -60,7 +60,7 @@ isalnumspch(int c)
        if (isalnum(c) != 0)
                return c;
 
-       if (c == '-' || c == '_' || c == '+' || c == '.')
+       if (c == '-' || c == '_' || c == '+' || c == '.' || c == '/')
                return c;
 
        return 0;

この修正を含むソースパッケージ(tar.gz)を下記のようにして作って、specファイルもrpmbuildに写します.

cd ..
tar cvfz ~/rpmbuild/SOURCES/openpbs-20.0.1.tar.gz openpbs --transform 's/openpbs/openpbs-20.0.1/' --exclude "openpbs/.git*"
cp openpbs/openpbs.spec ~/rpmbuild/SPEC/

一応ソースを弄ったのでpbs_releaseを「c1」とします.
またpbs_homeもちょいと弄ります.

--- rpmbuild/SPECS/openpbs.spec.orig    2021-01-03 12:36:41.439212969 +0900
+++ rpmbuild/SPECS/openpbs.spec 2021-01-03 12:39:19.861564518 +0900
@@ -48,7 +48,7 @@
 %endif
 
 %if !%{defined pbs_release}
-%define pbs_release 0
+%define pbs_release c1
 %endif
 
 %if !%{defined pbs_prefix}
@@ -56,7 +56,7 @@
 %endif
 
 %if !%{defined pbs_home}
-%define pbs_home /var/spool/pbs
+%define pbs_home /var/lib/pbs
 %endif
 
 %if !%{defined pbs_dbuser}

こうして rpmbuild でパッケージを作ります

rpmbuild -ba rpmbuild/SPECS/openpbs.spec

できたパッケージは

ls -l rpmbuild/RPMS/x86_64/openpbs-*c1*
-rw-r--r-- 1 root root 1857224 Jan  3 12:43 rpmbuild/RPMS/x86_64/openpbs-client-20.0.1-c1.x86_64.rpm
-rw-r--r-- 1 root root 8076836 Jan  3 12:43 rpmbuild/RPMS/x86_64/openpbs-debuginfo-20.0.1-c1.x86_64.rpm
-rw-r--r-- 1 root root  428728 Jan  3 12:43 rpmbuild/RPMS/x86_64/openpbs-devel-20.0.1-c1.x86_64.rpm
-rw-r--r-- 1 root root 2256884 Jan  3 12:43 rpmbuild/RPMS/x86_64/openpbs-execution-20.0.1-c1.x86_64.rpm
-rw-r--r-- 1 root root 3418256 Jan  3 12:43 rpmbuild/RPMS/x86_64/openpbs-server-20.0.1-c1.x86_64.rpm

となります。

以降のインストール・設定はOpenPBSを参照してください

これでジョブタイトルに[/(スラッシュ)]が入ってもジョブがそのまま実行されます


留意
qsub.shの内容にも寄りますが、「#PBS -o <標準出力先>」「#PBS -e <標準エラー先>」を明記しないと
タイトル名に「.o<ジョブID>」「.e<ジョブID>」が付いたそれぞれのファイルが用意されます。

末尾が「/(スラッシュ)」で終わっていると標準出力、標準エラーは共に不可視ファイルな「.o<ジョブID>」「.e<ジョブID>」となります。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-01-03 (日) 14:37:18 (54d)