Неправильная настройка среды работы на SGE

Я понимаю, что это может быть трудно ответить, если вы не знаете, как настроен мой кластер, но я пытаюсь отправить задания (через SGE) в кластер, но среда не настроена правильно и рабочие задания не выполняются. Кроме того, есть два разных основных узла, в которые я могу войти, чтобы отправлять задания в один и тот же кластер, а мои скрипты работают на одном, а не на другом.

Это информация о машине для главного узла, над которой работает мой скрипт:

cat /proc/version Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 EDT 2012 

Машина не работает:

 cat /proc/version Linux version 3.10.0-514.6.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Thu Feb 23 03:04:39 UTC 2017 

Вот тестовый скрипт, который я использую:

 #!/bin/bash -I #$ -wd ~ #$ -N test #$ -o ~/test.log #$ -jy #$ -terse #$ -V #$ -notify #$ -l h_vmem=2G -pe smp 1 -l athena=true ls hostname nproc 

Вот результат после запуска «qsub test.sh»:

 /bin/bash: module: line 1: syntax error: unexpected end of file /bin/bash: error importing function definition for `BASH_FUNC_module' /opt/sge/default/spool/execd/node156/job_scripts/1063646: line 11: ls: command not found /opt/sge/default/spool/execd/node156/job_scripts/1063646: line 12: hostname: command not found 

Чтобы добавить к путанице, когда я ssh непосредственно в эти узлы задания (node156 в приведенном выше примере), я могу просто выполнить команды ls и hostname!

Я был в контакте с администраторами кластера, и они не могут воспроизвести мою проблему (даже если они заходят за мной как я). Сначала мы проверили, что если настройка ~ / .bashrc и ~ / .bash_profile по умолчанию будет исправлена, но это не так. Вот эти файлы:

 cat ~/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi и cat ~/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi 

.bash_profile:

 cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs 

Какие-либо предложения?

  • Будет ли иметь десятки неактивных логинов ухудшить производительность
  • mknfsmnt не работает с «Ошибка системного вызова -1»
  • Настройка linux-кластера, например Windows с CentOS или Ubuntu?
  • О mem и vmem
  • Запуск веб-сервера без доступа root
  • Как найти, какие машины простаивают в кластере из множества узлов
  • Выполнение параллельных заданий bash в кластере HPC с использованием GNU parallel
  • Кластер Mariadb не запускается при перезагрузке
  • One Solution collect form web for “Неправильная настройка среды работы на SGE”

    У меня нет полного решения, потому что я ничего не знаю о SGE. Но я могу объяснить часть проблемы.

    Машина, на которой работает ваш скрипт, запускает старую версию операционной системы. Это видно не только по номеру версии ядра, но и по тому, что он не получил обновлений безопасности через некоторое время. В частности, я думаю, что он использует версию bash, которая уязвима для ошибки Shellshock .

    Bash (ab) использует среду для передачи функций. Обычно среда используется только для передачи данных в виде ряда элементов вида NAME = VALUE . Старые версии bash добавляют элементы формы NAME =() { CODE } , которые в некоторых случаях допускают ввод кода, определяя переменную, которую никогда не будет использовать скрипт – ошибка shellshock . Исправление ошибки изменило способ кодирования функций BASH_FUNC_ NAME %%=() { CODE } .

    Очевидно, какая-то часть вашей установки выгружает среду и анализирует ее. Это может быть частью SGE или что-то конкретное для вашей установки. Правдоподобной причиной для этого является сохранение среды, в которой было отправлено задание, для выполнения задания в той же среде.

    Что-то где-то определяет функцию, называемую module в bash, и экспортирует ее. Код будет выглядеть примерно так:

     module () { … } export -f module 

    Исправление заключается в том, чтобы обновить парсер среды до того, что может справиться с новой кодировкой bash или прекратить экспорт функций.

    Interesting Posts

    Загрузка Centos 7 с пользовательской проблемой ядра

    Процесс убит убийцей OOM, когда много памяти, по-видимому, бесплатно

    SSL-сертификат для локального сервера Apache

    Как заменить один пакет другим с помощью yum?

    Безопасный переход пароля root в сценарий оболочки

    Ошибка компиляции fmem с помощью make

    В zsh как установить псевдоним для `less` для получения вывода stderr?

    конвертировать музыкальную библиотеку WAV в FLAC в командной строке и добиваться наилучшего качества

    передать 1 переменную среды, используя sudo

    как определить, что DISPLAY активен / имеет фокус ввода?

    Почему процесс tee все еще работает?

    Какие значения из debconf-get-selections не следует выбирать?

    Как использовать Fedora 20 DVD после установки

    Как копировать в две папки одновременно с помощью GNU параллельно, создавая несколько потоков?

    Многострочные записи в файле кикстарта с использованием обратного слэша

    Linux и Unix - лучшая ОС в мире.