2016-10-14 4 views
0

Ich verwende den Rechencluster meiner Abteilung mit Sun Grid Engine.mehrere qsub-Befehle gleichzeitig

Wenn ich mehrere R-Jobs ausführen muss, schreibe ich Shell-Skriptdateien mit den Namen s01.sh, s02.sh, ..., s50.sh, die 'R CMD BATCH r01.r', 'R CMD BATCH r02.r ', ...,' R CMD BATCH r50.r 'als Inhalt.

Dann öffne ich 'PUTTY', logge mich ein und muss dann 'qsub s01.sh', 'qsub s02.sh' .... etc eingeben.

Wenn es Hunderte von Jobs gibt, ist es eine echte Arbeit, Hunderte von Jobs manuell einzugeben. Gibt es eine Möglichkeit, diese mehreren "Qsub" -Befehle gleichzeitig auszuführen?

Antwort

1

Ich denke, Sie müssen nur die qsub Befehle nacheinander ausführen, da qsub selbst ziemlich schnell sein sollte. (Die übergebenen Befehle werden wahrscheinlich parallel ausgeführt.)

Sie brauchen nur eine Schleife.

Sie bereits die r*.r Dateien erstellt haben Angenommen, das ist einfach, mit einem kleinen Shell-Skript zu tun:

#!/bin/bash 

for file in r*.r ; do 
    script=$(echo $file | sed 's/^r/s/;s/\.r$/.sh/') 
    ( 
     echo "#/bin/sh" 
     echo "R CMD BATCH $file" 
    ) > $script 
    chmod +x $script 
    qsub $script 
done 
+0

Vielen Dank, aber ich verstehe immer noch nichts. Also, sollte ich den Code direkt eingeben, oder sollte ich eine blahblah.sh-Datei erstellen und Ihren Code in der .sh-Datei enthalten? – user67275

+0

@ user67275: Letzteres ist viel einfacher. Erstellen Sie ein Skript namens 'submit-jobs.sh' mit den von mir geschriebenen Befehlen, führen Sie' chmod + x submit-jobs.sh' aus und führen Sie das Skript aus. (Bitte beachten Sie, dass ich es nicht getestet habe; ich habe kein 'Qsub' auf meinem System.) –

1

Ich gehe davon aus, dass die Skripte sind im aktuellen Ordner ausgeführt werden.

for file in s*.sh; do; qsub $file; done