Tudna valaki mondani különbséget a szkript beküldésének következő módjai között:
$ qsub script_name.sh
és
./script_name.sh
Mi a különbség a munka két fürtbe történő beküldésének fenti két módja között?
Azt is, hogy néha miért kell beírnom:
$ chmod +x script_name.sh
… mielőtt beírhatnám a ./script_name.sh
munkát benyújtani? Hogy lehet, hogy néha csak be kell írnom a qsub script_name.sh
szót?
Sajnálom, hogy nem ismerem a Unixot.
Megjegyzések
- Mi az a qsub? _
- @HaukeLaging – lásd a válaszomat.
Válasz
Számítási fürtöt használ?
Mivel a qsub
ról kérdezel, feltételezem, hogy a GridEngine vagy néhány számítógépes fürtözési termék .
qsub
A qsub script_name.sh
azt mondod a fürt fejcsomópontjának, hogy el akarsz küldeni egy parancsfájlt az adott kiszolgálón való futtatásra. Tehát a szervernek hozzáférnie kell ugyanazokhoz a fájlrendszerekhez, amelyek a szkriptet tartalmazzák. Például, ha a szkript itt él, /home/myusername/script_name.sh
, akkor a fájlnak elérhetőnek kell lennie mindkét számítógép, amelyen a qsub
parancsot futtatja, valamint a fürt bármely olyan csomópontja, amelyen a script_name.sh
futtatni szándékozik.
Szkript futtatása
A szkript futtatásakor ./script_name.sh
nem futtat semmit a fürtön. Ezt a parancsfájlt helyben futtatja a rendszer. Ha parancsot használtál egy héj megszerzésére a fürtön, qsh
, akkor futtasd ezt a parancsot azon a csomóponton, amelyen a fürt ütemezője csomópontot adott. bekapcsolva.
Engedélyek
Bármikor készít egy szkriptet és futtatni szándékozik, el kell mondania a rendszernek a szándékát, megváltoztatva a szkript engedélyeit úgy, hogy azok tükrözzék ezt a fájl futtatható. Ellenkező esetben a fájl nem szkript, hanem csak szöveges fájl.
A fájlokhoz hasonló engedélyeket láthat:
néhány szkript
$ cat script_name.sh #!/bin/bash echo "hello world"
nem futtatható
$ 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
futtatható
$ 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
Megjegyzések
- Szia slm, köszönöm válaszát. De kissé zavart vagyok, mit jelent az, amikor azt mondod, hogy " ha ' parancsot használtál egy héj megszerzéséhez a fürtön , qsh, akkor ' futtatja ezt a parancsot bármely csomóponton, a fürt ' ütemező csomópontja úgy döntött, hogy egy shellt ad neked. "
- @john_w – milyen fürtözési technológiát használ itt? GridEngine vagy valami más?
- Szia, sajnálom, nem vagyok biztos benne, mit jelent a fürtözési technológia, rendkívül újonc vagyok. Tudom, hogy van egy bashrc fájlom. Hogyan tudom megtudni a GridEngine-t? beírok valamilyen parancsot a parancssorba, hogy megtudjam?
- Szintén van egy szkriptem, amely másik parancsfájlt kér. A start_prephasing.sh szkript meghívja a prephasing.sh-t egy hurok használatával a start_prephasing.sh fájlban. A qsub segítségével a star_prephasing.sh fájlt küldtem be, de a " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: 9. sor: qsub: a parancs nem található ". De amikor beírom a chmod + x start_prephasing.sh fájlt, akkor a prephasing.sh 22 feladata sikeresen fut. Nem tudom, miért, azt hiszem, még mindig nem értem teljesen a különbséget a qsub start_prephasing.sh és a ./start_prephasing.sh között.
- Ez az amit a start_prephasing.sh szkript tartalmaz: # $ -S / bin / bash # $ -cwd export HOME = / adp / home / hswong / CACTI / imputation / prephasing hagyja, hogy a = 1 b = 22, míg a [$ a -le $ b] do qsub -q long.q -o ~ / queue -e ~ / queue prephasing.sh $ a #qsub -pe párhuzamos 4 -q parallel_long.q -o ~ / queue -e ~ / queue prephasing.sh $ a let a = $ a + 1 kész