hvad er forskellen mellem qsub og ./

Kan nogen fortælle mig forskellen på følgende måder at indsende et script på:

$ qsub script_name.sh 

og

./script_name.sh 

Hvad er forskellen mellem de to ovennævnte måder at indsende et job til en klynge?

Også hvorfor skal jeg undertiden skrive:

$ chmod +x script_name.sh 

… inden jeg kan skrive ./script_name.sh at indsende et job? Hvorfor skal jeg nogle gange bare skrive qsub script_name.sh?

Beklager, jeg er ikke særlig fortrolig med Unix.

Kommentarer

  • Hvad er qsub? _
  • @HaukeLaging – se mit svar.

Svar

Brug af en computerklynge?

Da du spørger om qsub Jeg antager, at du “bruger GridEngine eller noget computer clustering product .

qsub

Når du kører kommandoen qsub script_name.sh du fortæller klyngens hovednode, at du vil indsende et script, der skal køre på den server. Så serveren skal have adgang til de samme filsystemer, der indeholder scriptet. For eksempel hvis dit script bor her /home/myusername/script_name.sh, skal denne fil være tilgængelig på begge computer kører du kommandoen qsub samt en hvilken som helst node i din klynge, hvor du vil script_name.sh køre.

Kørsel af et script

Når du kører scriptet, ./script_name.sh kører du ikke noget i klyngen. Du kører dette script lokalt på din system. Hvis du har brugt en kommando til at få en shell i klyngen qsh, kører du denne kommando på den knude, som klyngens planlægningsknude besluttede at give dig en shell til.

Tilladelser

Hver gang du laver et script og har til hensigt at køre det, skal du fortælle systemet dine hensigter ved at ændre scriptets tilladelser, så de afspejler det filen er eksekverbar. Ellers er filen ikke et script, men kun en tekstfil.

Du kan se en filtilladelse som sådan:

noget script

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

ikke eksekverbar

$ 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 

eksekverbar

$ 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, tak for dit svar. Men jeg er lidt forvirret over, hvad det betyder, når du siger " Hvis du ' har brugt en kommando til at få en shell i klyngen , qsh, så kører du ' denne kommando på hvilken node som klyngen ' s planlægningsknude besluttede at give dig en shell på. "
  • @john_w – hvilken klyngeteknologi bruger du her? GridEngine eller noget andet?
  • Hej, undskyld, jeg er ikke sikker på, hvad klyngeteknologi betyder, jeg er ekstremt nybegynder. Jeg ved, at jeg har en bashrc-fil. Hvordan finder jeg ud af GridEngine? skriver jeg en kommando på kommandolinjen for at finde ud af det?
  • Jeg har også et script, der kræver et andet script. Scriptet start_prephasing.sh kalder prephasing.sh ved at bruge en loop i start_prephasing.sh. Jeg brugte qsub til at indsende star_prephasing.sh, men jeg modtager fejlen " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: line 9: qsub: kommandoen blev ikke fundet ". Men når jeg skriver chmod + x start_prephasing.sh og derefter vil de 22 job i prephasing.sh køre med succes. Jeg er ikke sikker på hvorfor, jeg tror, at jeg stadig ikke ' ikke fuldt ud forstår forskellen mellem qsub start_prephasing.sh og ./start_prephasing.sh endnu.
  • Dette er hvad jeg har i start_prephasing.sh scriptet: # $ -S / bin / bash # $ -cwd eksport HOME = / adp / home / hswong / CACTI / imputation / prephasing lad a = 1 b = 22 mens [$ a -le $ b] gør qsub -q long.q -o ~ / kø -e ~ / kø indfasning.sh $ a #qsub -pe parallel 4 -q parallel_long.q -o ~ / kø -e ~ / kø indfasning.sh $ a lad a = $ a + 1 færdig

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *