Poate cineva să-mi spună diferența dintre următoarele moduri de a trimite un script:
$ qsub script_name.sh
și
./script_name.sh
Care sunt diferențele dintre cele două moduri de mai sus de a trimite o lucrare unui cluster?
De ce, uneori, trebuie să scriu:
$ chmod +x script_name.sh
… înainte să pot tasta ./script_name.sh
a trimite o slujbă? De ce uneori trebuie doar să introduc qsub script_name.sh
?
Îmi pare rău, „nu prea cunosc Unix.
Comentarii
- Ce este qsub? _
- @HaukeLaging – vezi răspunsul meu.
Răspuns
Folosind un cluster de calcul?
De când întrebați despre qsub
, voi presupune că utilizați GridEngine sau unele produs de clusterizare computer .
qsub
Când rulați comanda qsub script_name.sh
îi spuneți nodului principal al clusterului că doriți să trimiteți un script pentru a rula pe acel server. Deci, serverul respectiv ar trebui să aibă acces la același sistem de fișiere care conține scriptul. De exemplu, dacă scriptul dvs. locuiește aici, /home/myusername/script_name.sh
, acest fișier ar trebui să fie accesibil atât pe computerul „executați comanda qsub
, precum și orice nod din clusterul dvs. pe care intenționați să îl executați script_name.sh
.
Rularea unui script
Când rulați scriptul, ./script_name.sh
nu executați nimic pe cluster. Rulați acest script local pe sistem. Dacă „ați folosit o comandă pentru a obține un shell pe cluster, qsh
, atunci executați această comandă pe orice nod nodul planificator al clusterului a decis să vă ofere un shell pe.
Permisiuni
De fiecare dată când creați un script și intenționați să îl rulați, trebuie să spuneți sistemului intențiile dvs., schimbând permisiunile scriptului astfel încât să reflecte că fișierul este executabil. În caz contrar, fișierul nu este un script, ci doar un fișier text.
Puteți vedea permisiunile unui astfel de fișier:
unele script
$ cat script_name.sh #!/bin/bash echo "hello world"
nu se execută
$ 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
executabil
$ 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
Comentarii
- Bună slm, vă mulțumim pentru răspuns. Dar sunt puțin confuz cu privire la ce înseamnă atunci când spui " Dacă ' ai folosit o comandă pentru a obține un shell pe cluster , qsh, atunci ' executați această comandă pe orice nod, clusterul ' a decis să vă ofere un shell pe. "
- @john_w – ce tehnologie de clusterizare folosiți aici? GridEngine sau altceva?
- Bună, îmi pare rău, nu sunt sigur ce înseamnă tehnologia de clustering, sunt extrem de începător. Știu că am un fișier bashrc. Cum aflu GridEngine? introduc o comandă pe linia de comandă pentru a afla?
- De asemenea, am un script care solicită un alt script. Scriptul start_prephasing.sh apelează prephasing.sh folosind o buclă în start_prephasing.sh. Foloseam qsub pentru a trimite star_prephasing.sh, dar primesc eroarea " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: linia 9: qsub: comanda nu a fost găsită ". Dar când scriu chmod + x start_prephasing.sh și apoi cele 22 de joburi din prephasing.sh vor rula cu succes. Nu sunt sigur de ce, cred că încă nu ' nu înțeleg pe deplin diferența dintre qsub start_prephasing.sh și ./start_prephasing.sh.
- Acesta este ceea ce am în scriptul start_prephasing.sh: # $ -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 ~ / 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 done