Czy ktoś może mi powiedzieć, jaka jest różnica między następującymi sposobami przesyłania skryptu:
$ qsub script_name.sh
i
./script_name.sh
Jakie są różnice między dwoma powyższymi sposobami przesyłania oferty pracy do klastra?
Poza tym czasami muszę pisać:
$ chmod +x script_name.sh
… zanim będę mógł wpisać ./script_name.sh
przesłać ofertę pracy? Dlaczego czasami wystarczy wpisać qsub script_name.sh
?
Przepraszam, że nie znam systemu Unix.
Komentarze
- Co to jest qsub? _
- @HaukeLaging – zobacz moją odpowiedź.
Odpowiedź
Używasz klastra obliczeniowego?
Ponieważ „pytasz o qsub
, zakładam, że” używasz GridEngine lub innych produkt do klastrowania komputerów .
qsub
Po uruchomieniu polecenia qsub script_name.sh
mówisz węzłowi głównemu klastra, że chcesz przesłać skrypt do uruchomienia na tym serwerze. Tak więc serwer musiałby mieć dostęp do tych samych systemów plików, które zawierają skrypt. Na przykład, jeśli skrypt znajduje się tutaj, /home/myusername/script_name.sh
, ten plik musiałby być dostępny zarówno w komputer, na którym „uruchamiasz polecenie qsub
, a także dowolny węzeł w klastrze, na którym chcesz uruchomić script_name.sh
.
Uruchamianie skryptu
Po uruchomieniu skryptu ./script_name.sh
nic nie jest uruchamiane w klastrze. Uruchamiasz ten skrypt lokalnie na swoim system. Jeśli „użyłeś polecenia, aby uzyskać powłokę w klastrze, qsh
, to„ uruchomiłeś to polecenie na dowolnym węźle, w którym węzeł harmonogramu klastra zdecydował się udostępnić Ci powłokę on.
Uprawnienia
Za każdym razem, gdy tworzysz skrypt i zamierzasz go uruchomić, musisz poinformować system o swoich zamiarach, zmieniając uprawnienia skryptu tak, aby odzwierciedlały to plik jest wykonywalny. W przeciwnym razie plik nie jest skryptem, ale tylko plikiem tekstowym.
Możesz zobaczyć uprawnienia do plików, takie jak:
jakiś skrypt
$ cat script_name.sh #!/bin/bash echo "hello world"
niewykonywalny
$ 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
wykonywalny
$ 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
Komentarze
- Cześć, dziękuję za odpowiedź. Ale jestem trochę zdezorientowany, co to znaczy, gdy mówisz " Jeśli ' użyłeś polecenia, aby uzyskać powłokę w klastrze , qsh, to ' ponownie uruchamiasz to polecenie na dowolnym węźle, w którym węzeł harmonogramu klastra ' zdecydował się udostępnić powłokę. "
- @john_w – jakiej technologii klastrowania tutaj używasz? GridEngine czy coś innego?
- Cześć, przepraszam, nie jestem pewien, co oznacza technologia klastrowania, jestem skrajnie początkującym. Wiem, że mam plik bashrc. Jak znaleźć silnik GridEngine? czy wpisać jakieś polecenie w wierszu poleceń, aby się tego dowiedzieć?
- Mam również skrypt, który wywołuje inny skrypt. Skrypt start_prephasing.sh wywołuje prephasing.sh przy użyciu pętli w pliku start_prephasing.sh. Używałem qsub do przesłania star_prephasing.sh, ale otrzymuję błąd " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: line 9: qsub: nie znaleziono polecenia ". Ale kiedy wpiszę chmod + x start_prephasing.sh i wtedy 22 zadania z prephasing.sh zostaną pomyślnie uruchomione. Nie wiem dlaczego, myślę, że nadal nie ' nie rozumiem w pełni różnicy między qsub start_prephasing.sh i ./start_prephasing.sh.
- To jest co mam w skrypcie 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 gotowe