2016-09-19 1 views
0

J'ai un script que j'essaie de soumettre à un cluster SGE (sur Redhat Linux). La première partie du script définit le dossier en cours du chemin CWD complet, en tant que variable à utiliser en aval:SGE Cluster - le script échoue après la soumission - fonctionne dans le terminal

#!/usr/bin/bash 
# 
#$ -cwd 
#$ -A username 
#$ -M [email protected] 
#$ -j y 
#$ -m aes 
#$ -N test 
#$ -o test.log.txt 

echo 'This is a test.' 
result="${PWD##*/}" 
echo $result 

En bash, cela fonctionne comme prévu:

CWD:

-bash-4.1$ pwd 
/home/user/test 

Run script:

-bash-4.1$ bash test.sh 
This is a test. 
test 

Quand je soumets la tâche au cluster:

-bash-4.1$ qsub -V test.sh 

et examinez le fichier journal:

This is a test. 
Missing }. 

Est-ce que quelqu'un sait pourquoi la soumission du travail dit « Missing} » quand il fonctionne directement à partir de la commande en ligne? Je ne suis pas sûr de ce qui me manque ici.

Merci.

+1

Je ne peux pas le reproduire. Ce que je recommanderais d'essayer est d'exécuter la commande 'qrsh' pour se connecter à un noeud via SGE. Ensuite, lancez votre script à partir de là. Cela ne fait pas exactement la même chose mais je peux vous aider à trouver le problème. –

Répondre

1

La norme posix pour les planificateurs de lots leur demande d'ignorer le #! line et utilise à la place soit un shell configuré dans le cluster, soit un shell sélectionné par l'option -S de qsub. La valeur par défaut est généralement csh. Donc, ajouter quelque chose comme #$ -S /usr/bin/bash dans le script le fera interpréter par bash. Vous pouvez également convaincre l'administrateur du cluster de modifier les files d'attente en unix_behavior à partir de posix_compliant.