Kan iemand mij het verschil vertellen tussen de volgende manieren om een script in te dienen:
$ qsub script_name.sh
en
./script_name.sh
Wat zijn de verschillen tussen de bovenstaande twee manieren om een taak naar een cluster te verzenden?
Ook waarom moet ik soms typen:
$ chmod +x script_name.sh
… voordat ik ./script_name.sh
om een vacature in te dienen? Hoe komt het dat ik soms qsub script_name.sh
moet typen?
Sorry, ik ben niet erg bekend met Unix.
Reacties
- Wat is qsub? _
- @HaukeLaging – zie mijn antwoord.
Antwoord
Gebruikt u een rekencluster?
Aangezien u “vraagt naar qsub
, ga ik ervan uit dat u” GridEngine of iets computerclusteringproduct .
qsub
Wanneer u de opdracht qsub script_name.sh
je vertelt het hoofdknooppunt van het cluster dat je een script wilt indienen om op die server te draaien. Dus die server zou toegang moeten hebben tot dezelfde bestandssystemen die het script bevatten. Als je script bijvoorbeeld hier staat, /home/myusername/script_name.sh
, moet dit bestand toegankelijk zijn op zowel de computer waarop u “de opdracht qsub
uitvoert, evenals elk knooppunt in uw cluster waarop u script_name.sh
wilt uitvoeren.
Een script uitvoeren
Wanneer u het script ./script_name.sh
uitvoert, voert u niets uit op het cluster. U voert dit script lokaal uit op uw systeem. Als je een commando hebt gebruikt om een shell op het cluster te krijgen, qsh
, dan voer je dit commando uit op welk knooppunt dan ook, het scheduler-knooppunt van het cluster heeft besloten je een shell te geven on.
Toestemmingen
Elke keer dat u een script maakt en van plan bent om het uit te voeren, moet u het systeem uw bedoelingen vertellen, door de toestemmingen van het script zodanig te wijzigen dat ze weerspiegelen dat het bestand is uitvoerbaar. Anders is het bestand geen script, maar slechts een tekstbestand.
U kunt de volgende bestandsrechten zien:
een script
$ cat script_name.sh #!/bin/bash echo "hello world"
niet uitvoerbaar
$ 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
uitvoerbaar
$ 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
Reacties
- Hallo slm, bedankt voor je antwoord. Maar ik ben een beetje in de war over wat het betekent als je zegt " Als je ' een commando hebt gebruikt om een shell op het cluster te krijgen , qsh, dan voer je ' dit commando uit op welk knooppunt dan ook het cluster ' s scheduler-knooppunt besloot je een shell te geven. "
- @john_w – welke clusteringstechnologie gebruikt u hier? GridEngine of iets anders?
- Hallo, sorry, ik weet niet zeker wat clusteringtechnologie betekent, ik ben een buitengewoon nieuweling. Ik weet dat ik een bashrc-bestand heb. Hoe kom ik achter de GridEngine? typ ik een commando op de commandoregel om erachter te komen?
- Ik heb ook een script dat om een ander script vraagt. Het script start_prephasing.sh roept prephasing.sh aan met een lus in de start_prephasing.sh. Ik gebruikte qsub om star_prephasing.sh in te dienen, maar ik krijg de fout " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: regel 9: qsub: commando niet gevonden ". Maar als ik chmod + x start_prephasing.sh typ en dan zullen de 22 taken van de prephasing.sh met succes worden uitgevoerd. Ik weet niet zeker waarom, ik denk dat ik ' nog steeds niet het verschil begrijp tussen qsub start_prephasing.sh en ./start_prephasing.sh.
- Dit is wat ik heb in het start_prephasing.sh script: # $ -S / bin / bash # $ -cwd export HOME = / adp / home / hswong / CACTI / imputation / prephasing let a = 1 b = 22 while [$ a -le $ b] do qsub -q long.q -o ~ / wachtrij -e ~ / wachtrij prephasing.sh $ a #qsub -pe parallel 4 -q parallel_long.q -o ~ / wachtrij -e ~ / wachtrij prephasing.sh $ a laat a = $ a + 1 gedaan