Quelquun peut-il me dire la différence entre les façons suivantes de soumettre un script:
$ qsub script_name.sh
et
./script_name.sh
Quelles sont les différences entre les deux méthodes ci-dessus pour soumettre un travail à un cluster?
Aussi comment se fait-il parfois que je doive taper:
$ chmod +x script_name.sh
… avant de pouvoir taper ./script_name.sh
pour soumettre un travail? Comment se fait-il parfois que je doive simplement taper qsub script_name.sh
?
Désolé, je « ne suis pas très familier avec Unix.
Commentaires
- Quest-ce que qsub? _
- @HaukeLaging – voir ma réponse.
Réponse
Utilisation dun cluster de calcul?
Puisque vous « posez des questions sur qsub
, je » vais supposer que vous « utilisez GridEngine ou certains produit de clustering dordinateurs .
qsub
Lorsque vous exécutez la commande qsub script_name.sh
vous dites au nœud principal du cluster que vous souhaitez soumettre un script à exécuter sur ce serveur. Ainsi, ce serveur devrait avoir accès au même système de fichiers que celui contenant le script. Par exemple, si votre script se trouve ici, /home/myusername/script_name.sh
, ce fichier devra être accessible à la fois sur le lordinateur sur lequel vous exécutez la commande qsub
ainsi que tout nœud de votre cluster sur lequel vous souhaitez script_name.sh
sexécuter.
Exécution dun script
Lorsque vous exécutez le script, ./script_name.sh
vous « nexécutez rien sur le cluster. Vous » exécutez ce script localement sur votre système. Si vous « avez utilisé une commande pour obtenir un shell sur le cluster, qsh
, alors vous » exécutez cette commande sur nimporte quel nœud que le nœud du planificateur du cluster a décidé de vous donner un shell sur.
Autorisations
Chaque fois que vous créez un script et que vous avez lintention de lexécuter, vous devez indiquer au système vos intentions, en modifiant les autorisations du script de telle sorte quelles reflètent cela le fichier est exécutable. Sinon, le fichier nest pas un script, mais juste un fichier texte.
Vous pouvez voir les permissions dun fichier comme ceci:
un script
$ cat script_name.sh #!/bin/bash echo "hello world"
non exécutable
$ 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
exécutable
$ 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
Commentaires
- Salut slm, merci pour votre réponse. Mais je ne sais pas trop ce que cela signifie lorsque vous dites " Si vous ' avez utilisé une commande pour obtenir un shell sur le cluster , qsh, alors vous ' exécutez cette commande sur nimporte quel nœud sur lequel le nœud du planificateur du cluster ' a décidé de vous donner un shell. "
- @john_w – quelle technologie de clustering utilisez-vous ici? GridEngine ou autre chose?
- Salut, désolé, je ne sais pas ce que signifie la technologie de clustering, je suis extrêmement novice. Je sais que jai un fichier bashrc. Comment trouver le GridEngine? puis-je taper une commande sur la ligne de commande pour le savoir?
- Jai également un script qui appelle un autre script. Le script start_prephasing.sh appelle prephasing.sh en utilisant une boucle dans le start_prephasing.sh. Jutilisais qsub pour soumettre star_prephasing.sh, mais je reçois lerreur de " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: ligne 9: qsub: commande introuvable ". Mais lorsque je tape chmod + x start_prephasing.sh, les 22 travaux de prephasing.sh sexécutent avec succès. Je ne sais pas pourquoi, je pense que je ne comprends toujours pas ' la différence entre qsub start_prephasing.sh et ./start_prephasing.sh.
- Cest ce que jai dans le script 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 terminé