コンピューターネットワークでタスクを実行しているときは? qsubanyタスクを実行すると、タスクが端末を占有せず、他のことができることに気付き始めました。同じ端末(タスクが完了するのに1分しかかからない場合でも非常に便利です)。
次に、qstatを実行して、どのタックが終了し、どのタックが終了していないかを確認します。
http://pubs.opengroup.org/onlinepubs/009604599/utilities/qsub.html はqsubの良い説明です。
このような場合、私はむしろ別のターミナルを開きたいと思います。あなたがそれをしたくない理由は何ですか?
Qsubを実行することの欠点は、簡単な操作のために小さなスクリプトファイルを作成する必要があることです。これには時間がかかります。同じネットワークで作業している他のユーザーの数はわかりませんが、その目的は、クラスター上の複数のユーザーのジョブのスケジューラーとして意図されています。特に、利用可能な無料のコアがない場合、単純なジョブがキューに入れられ、時間がかかります。
代わりにscreen
を検討しましたか? screen
を使用すると、同じ端末で別のセッションを開始および一時停止できます。ワークフローは次のようになります
$ screen
$ screen -r
(再開します)$ exit
標準のqsub
よりもat
を使用する利点は見当たりません。 at
コマンドは「スクリプト」を取り、それを実行しますat現在の環境を使用して、特定の時間(「今」など)。次に、atq
でステータスを確認するか、atrm
でジョブを削除できます。
$ Nohup ./myscript myargs & # put script in the background
# almost the same as
$ echo ./myscript myargs | at now # computer runs script independent of terminals
myscript
が入力を検索しないようにする必要があります。
私自身、Bernhardが示唆しているように、どこに行っても1つのターミナルセッションでscreen
を使用します。新しいウィンドウ(screen
内)を開き、スクリプトを開始して、元のscreen
ウィンドウに切り替えます。
qsub
を使用して、通常は画面内でインタラクティブに実行するバックグラウンドジョブに不利な点は見られません。使用可能なクラスターがある場合、これは最適なソリューションです。
ジョブスケジューラを利用できますが、長い間、画面を使用して長時間実行されるジョブをバックグラウンドで処理したり、qsubスクリプト作成のオーバーヘッドをあまりかけずに並列処理を実現したりする傾向がありました。最終的に、このアプローチの制限が明らかになり、このqsubラッパーqgo
を作成して、&
とscreen
をqsub
に置き換えることができるようにしました。
#!/bin/bash
mkdir -p qsubscripts
qsub -w $(pwd)/qsubscripts -d $(pwd) -M [email protected] $@ -S /bin/zsh -
私は好みのシェル(zsh)を使用していますが、もちろんこの引数を削除したり、他の引数を追加したりできます。 $@
を使用すると、必要に応じて-l ncpus=4
などのリソース仕様を含めることができます。スクリプトの使用方法は次のとおりです。
echo 'command -a 23 -b zz' | qgo | tee jobids
STDERR.*
ファイルとSTDOUT.*
ファイルは、現在の作業ディレクトリのqsubscripts
に書き込まれます。ジョブIDはThe working directory for the job is set as the
cwd`でも提供されるため、これらの短いスクリプトを簡単に作成できます。