Může mi někdo říct rozdíl mezi následujícími způsoby odeslání skriptu:
$ qsub script_name.sh
a
./script_name.sh
Jaké jsou rozdíly mezi výše uvedenými dvěma způsoby odeslání úlohy do klastru?
Jak to, že někdy musím napsat:
$ chmod +x script_name.sh
… než mohu napsat ./script_name.sh
odeslat práci? Jak to, že někdy stačí napsat qsub script_name.sh
?
Omlouvám se, že Unix moc neznám.
Komentáře
- Co je qsub? _
- @HaukeLaging – viz moje odpověď.
Odpověď
Používáte výpočetní cluster?
Protože se ptáte qsub
předpokládám, že používáte GridEngine nebo některé počítačový klastrový produkt .
qsub
Když spustíte příkaz qsub script_name.sh
říkáte hlavnímu uzlu clusteru, že chcete odeslat skript, který se má spustit na daném serveru. Tento server by tedy musel mít přístup ke stejným souborovým systémům, které obsahují skript. Například pokud váš skript zde žije, /home/myusername/script_name.sh
, tento soubor by musel být přístupný na obou počítač, na kterém znovu spouštíte příkaz qsub
, a také jakýkoli uzel ve vašem klastru, kde chcete script_name.sh
spustit.
Spuštění skriptu
Když spustíte skript, ./script_name.sh
v clusteru nic neběžíte. Tento skript spouštíte místně na svém Systém. Pokud jste použili příkaz k získání shellu v klastru, qsh
, spustíte tento příkaz na jakémkoli uzlu, který se uzel plánovače klastru rozhodl poskytnout vám shell zapnuto.
Oprávnění
Kdykoli vytvoříte skript a chcete jej spustit, musíte systému říct své záměry změnou oprávnění skriptu tak, aby odrážely to soubor je spustitelný. Jinak soubor není skript, ale pouze textový soubor.
Můžete zobrazit následující oprávnění souborů:
nějaký skript
$ cat script_name.sh #!/bin/bash echo "hello world"
nelze spustit
$ 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
spustitelný soubor
$ 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
Komentáře
- Ahoj slm, děkuji za odpověď. Ale jsem trochu zmatený, co to znamená, když říkáte " Pokud jste ' použili příkaz k získání shellu v klastru , qsh, pak ' znovu spustíte tento příkaz na libovolném uzlu, na kterém se uzel plánovače ' rozhodl dát vám shell. "
- @john_w – jakou technologii klastrování zde používáte? GridEngine nebo něco jiného?
- Ahoj, omlouvám se, nejsem si jistý, co znamená technologie shlukování, jsem extrémně nováček. Vím, že mám soubor bashrc. Jak zjistím GridEngine? napíšu na příkazový řádek nějaký příkaz, abych to zjistil?
- Mám také skript, který vyžaduje jiný skript. Skript start_prephasing.sh volá prephasing.sh při použití smyčky v start_prephasing.sh. Použil jsem qsub k odeslání star_prephasing.sh, ale dostávám chybu " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: řádek 9: qsub: příkaz nebyl nalezen ". Ale když napíšu chmod + x start_prephasing.sh a pak 22 úloh prephasing.sh bude úspěšně spuštěno. Nejsem si jistý, proč si myslím, že ještě ' plně nerozumím rozdílu mezi qsub start_prephasing.sh a ./start_prephasing.sh.
- Toto je co mám ve skriptu 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 hotovo