Kan någon berätta skillnaden mellan följande sätt att skicka in ett skript:
$ qsub script_name.sh
och
./script_name.sh
Vilka är skillnaderna mellan ovanstående två sätt att skicka ett jobb till ett kluster?
Också hur kommer det till att jag ibland behöver skriva:
$ chmod +x script_name.sh
… innan jag kan skriva ./script_name.sh
att skicka ett jobb? Varför behöver jag ibland bara skriva qsub script_name.sh
?
Tyvärr är jag inte särskilt bekant med Unix.
Kommentarer
- Vad är qsub? _
- @HaukeLaging – se mitt svar.
Svar
Använder du ett beräkningskluster?
Eftersom du frågar om qsub
Jag antar att du använder GridEngine eller något datorklusterprodukt .
qsub
När du kör kommandot qsub script_name.sh
du berättar klusterhuvudnoden att du vill skicka in ett skript för att köras på den servern. Så att servern måste ha åtkomst till samma filsystem som innehåller skriptet. Till exempel om ditt skript bor här, /home/myusername/script_name.sh
, måste den här filen vara tillgänglig på båda dator kör du kommandot qsub
samt vilken nod som helst i klustret där du tänker script_name.sh
att köra.
Köra ett skript
När du kör skriptet ./script_name.sh
kör du ingenting i klustret. Du kör det här skriptet lokalt på din systemet. Om du har använt ett kommando för att få ett skal i klustret, qsh
, kör du det här kommandot i vilken nod klusterens schemaläggningsnod bestämde sig för att ge dig ett skal på.
Behörigheter
Varje gång du skapar ett skript och tänker köra det måste du berätta för systemet vad du vill genom att ändra skriptets behörigheter så att de återspeglar det filen är körbar. Annars är filen inte ett skript utan bara en textfil.
Du kan se en filbehörighet som så:
något skript
$ cat script_name.sh #!/bin/bash echo "hello world"
ej körbar
$ 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
körbar
$ 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
Kommentarer
- Hej slm, tack för ditt svar. Men jag är lite förvirrad över vad det betyder när du säger " Om du ' har använt ett kommando för att få ett skal på klustret , qsh, då kör du ' det här kommandot i vilken nod klustret ' s schemaläggningsnod bestämde sig för att ge dig ett skal på. "
- @john_w – vilken klustringsteknik använder du här? GridEngine eller något annat?
- Hej, förlåt, jag är inte säker på vad klustringsteknik betyder, jag är extremt nybörjare. Jag vet att jag har en bashrc-fil. Hur får jag reda på GridEngine? skriver jag något kommando på kommandoraden för att ta reda på det?
- Jag har också ett manus som kräver ett annat manus. Skriptet start_prephasing.sh kallar prephasing.sh genom att använda en slinga i start_prephasing.sh. Jag använde qsub för att skicka star_prephasing.sh, men jag får felet " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: rad 9: qsub: kommandot hittades inte ". Men när jag skriver chmod + x start_prephasing.sh och sedan kommer de 22 jobben i prephasing.sh att köras framgångsrikt. Jag är inte säker på varför, jag tror att jag fortfarande inte ' inte förstår skillnaden mellan qsub start_prephasing.sh och ./start_prephasing.sh ännu.
- Detta är vad jag har i start_prephasing.sh-skriptet: # $ -S / bin / bash # $ -cwd export HOME = / adp / home / hswong / CACTI / imputation / pre-fasning låt a = 1 b = 22 medan [$ a -le $ b] gör qsub -q long.q -o ~ / queue -e ~ / queefasning.sh $ a #qsub -pe parallellt 4 -q parallel_long.q -o ~ / queue -e ~ / queefasing.sh $ a låt a = $ a + 1 klar