Was ist der Unterschied zwischen qsub und ./

Kann mir jemand den Unterschied zwischen den folgenden Arten der Übermittlung eines Skripts erklären:

$ qsub script_name.sh 

und

./script_name.sh 

Was sind die Unterschiede zwischen den beiden oben genannten Möglichkeiten, einen Job an einen Cluster zu senden?

Wie kommt es auch, dass ich manchmal Folgendes eingeben muss:

$ chmod +x script_name.sh 

… bevor ich ./script_name.sh einen Job einreichen? Wie kommt es, dass ich manchmal nur qsub script_name.sh eingeben muss?

Entschuldigung, ich bin mit Unix nicht sehr vertraut.

Kommentare

  • Was ist qsub? _
  • @HaukeLaging – siehe meine Antwort.

Antwort

Verwenden Sie einen Rechencluster?

Da Sie nach qsub fragen, gehe ich davon aus, dass Sie GridEngine oder einige Computerclustering-Produkt .

qsub

Wenn Sie den Befehl qsub script_name.sh Sie teilen dem Hauptknoten des Clusters mit, dass Sie ein Skript senden möchten, das auf diesem Server ausgeführt werden soll. Damit dieser Server Zugriff auf dieselben Dateisysteme haben muss, die das Skript enthalten. Wenn Ihr Skript beispielsweise hier /home/myusername/script_name.sh gespeichert ist, muss auf beide Dateien zugegriffen werden können Auf dem Computer führen Sie den Befehl qsub sowie auf jedem Knoten in Ihrem Cluster aus, auf dem script_name.sh ausgeführt werden soll.

Ausführen eines Skripts

Wenn Sie das Skript ausführen, ./script_name.sh führen Sie nichts im Cluster aus. Sie führen dieses Skript lokal auf Ihrem aus System. Wenn Sie einen Befehl verwendet haben, um eine Shell im Cluster zu erhalten, qsh, führen Sie diesen Befehl auf dem Knoten aus, auf dem der Schedulerknoten des Clusters eine Shell erstellt hat on.

Berechtigungen

Jedes Mal, wenn Sie ein Skript erstellen und es ausführen möchten, müssen Sie dem System Ihre Absichten mitteilen, indem Sie die Berechtigungen des Skripts so ändern, dass sie dies widerspiegeln Die Datei ist ausführbar. Andernfalls ist die Datei kein Skript, sondern nur eine Textdatei.

Sie können die folgenden Dateiberechtigungen anzeigen:

ein Skript

$ cat script_name.sh #!/bin/bash echo "hello world" 

nicht ausführbar

$ ls -l script_name.sh -rw-rw-r--. 1 saml saml 32 Feb 25 18:11 script_name.sh $ ./script_name.sh bash: ./script_name.sh: Permission denied 

ausführbar

$ chmod +x script_name.sh $ ls -l script_name.sh -rwxrwxr-x. 1 saml saml 32 Feb 25 18:11 script_name.sh $ ./script_name.sh hello world 

Kommentare

  • Hallo slm, danke für deine Antwort. Aber ich bin ein bisschen verwirrt darüber, was es bedeutet, wenn Sie " sagen, wenn Sie ' einen Befehl verwendet haben, um eine Shell im Cluster zu erhalten , qsh, dann führen Sie ' diesen Befehl auf jedem Knoten aus, auf dem der Schedulerknoten des Clusters ' beschlossen hat, Ihnen eine Shell zu geben. "
  • @john_w – Welche Clustering-Technologie verwenden Sie hier? GridEngine oder etwas anderes?
  • Hallo, tut mir leid, ich bin mir nicht sicher, was Clustering-Technologie bedeutet. Ich bin ein extremer Neuling. Ich weiß, dass ich eine bashrc-Datei habe. Wie finde ich die GridEngine heraus? gebe ich einen Befehl in die Befehlszeile ein, um dies herauszufinden?
  • Außerdem habe ich ein Skript, das ein anderes Skript anfordert. Das Skript start_prephasing.sh ruft prephasing.sh mit einer Schleife in start_prephasing.sh auf. Ich habe qsub verwendet, um star_prephasing.sh zu senden, aber ich erhalte den Fehler " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: Zeile 9: qsub: Befehl nicht gefunden ". Aber wenn ich chmod + x start_prephasing.sh eingebe und dann die 22 Jobs der prephasing.sh erfolgreich ausgeführt werden. Ich bin mir nicht sicher warum, ich glaube, ich verstehe ' den Unterschied zwischen qsub start_prephasing.sh und ./start_prephasing.sh noch nicht vollständig.
  • Dies ist Was ich im Skript start_prephasing.sh habe: # $ -S / bin / bash # $ -cwd exportiere HOME = / adp / home / hswong / CACTI / imputation / prephasing lass a = 1 b = 22 während [$ a -le $ b] mache qsub -q long.q -o ~ / queue -e ~ / queue prephasing.sh $ a #qsub -pe parallel 4 -q parallel_long.q -o ~ / queue -e ~ / queue prephasing.sh $ a let a = $ a + 1 erledigt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.