質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

3431閲覧

シェルスクリプト qsubのjobが終わってから次に進みたい時

LanternRains

総合スコア2

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/04/28 16:47

編集2020/04/28 17:04

#シェルスクリプト qsubのjobが終わってから次に進みたい時

例えば

#!/bin/sh -x
#$ -S /bin/sh
#$ -cwd
qsub -o test.txt script.sh
cat test.txt
qsub -o test2.txt -hold_jid script.sh script2.sh
echo finish

というスクリプトがあり
script.shの中身が
#!/bin/sh -x
#$ -S /bin/sh
#$ -cwd
date
sleep 50
date
だとします。

この場合、2つ目のqsubは-hold_jidによりscript.shが終わるまで始まらないと思うのですが、
1つ目のqsubの直後の
cat test.txt
が1つ目のqsubが終わってtest.txtが作成される前に始まるため、エラーとなります。

スクリプトの中で、qsubが終わるまで、次の処理を進めない方法はありませんでしょうか?
宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

スクリプトからすると、Grid Engine ( おそらくUGE - Univa Grid Engine ) を利用するシステムかと思うのですが、あくまで qsub は「ジョブ投入」( ジョブの実行をシステムに予約する ) だけですので、cat 等、すぐに実行するコマンドと並べて書くのは向いてません。

※ qsub XX; qsub -hold_jid XX YY とした場合は、「ジョブ同士で順序関係を設ける」ことになるので、その間では不整合は出ない

なので、その cat の部分もジョブとして処理を切り出して qsub するようにするのが一番素直です。

それが難しいのであれば、ジョブ終了を待つ処理を書くしかないでしょう。
UGEの標準ではそういうコマンドはないはずですが、結構機能的に需要はあるものなので、サイト独自で用意しているかも知れません ( あるいはノウハウとして持っているか )。サイト管理者に問い合わせるのが良いと思います。

自分で実装する場合、qstat を定期的に繰り返してジョブのステータスを見るような形になると思いますが、あまり頻回に実行するとシステムに余分な負荷を与えかねません。
そこのバランス感覚を確認する意味でも、サイト管理者に相談する方が良いと思います。

投稿2020/04/29 02:28

angel_p_57

総合スコア1672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LanternRains

2020/04/29 03:07

有難うございます。 まさにUGEでした。標準では、そのようなコマンドはやはりなさそうなのですね。サイト管理者にも聞いてみます。
guest

0

test.txtができるまで、数秒おきにファイルの存在チェックを行いながらループして待っていれば良いのではないでしょうか。

投稿2020/04/28 17:12

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LanternRains

2020/04/28 17:27

回答くださり、有難うございます。それで大丈夫そうです。 初歩的な所だったかもしれませんが、非常に助かりました。 感謝いたします。
LanternRains

2020/04/29 00:25

すみません。qsubでjobを実行すると、出力ファイルが先に出来上がり、そこにデータが追加され、どんどんサイズが増えていくシステムでした。サイズが増え終わってから(jobが完了してから)、次に進む時も存在チェックのループで対処できるものでしょうか。 もし分かりましたら、お願い申し上げます。
guest

0

自己解決

qsubに盲目的だったのですが

#!/bin/sh -x
#$ -S /bin/sh
#$ -cwd
script.sh > test.txt
cat test.txt
script2.sh > test2.txt
echo finish

これを、qsubに渡すだけで大丈夫でした。お騒がせ致しました。

投稿2020/04/29 02:18

LanternRains

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問