Неправильная настройка среды работы на 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 

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

  • XFS через общий ресурс iSCSI с кластером; будет ли ограждение причиной коррупции / потери данных?
  • Настройка linux-кластера, например Windows с CentOS или Ubuntu?
  • Linux запускает каждую программу в кластере
  • IBM AIX aix как запустить кластер при изменении lv и других узлах кластера?
  • Запуск R-скриптов в кластере Linux
  • Как извлечь значения ресурсов, указанных в директиве PBS, чтобы они могли отображаться в другие переменные среды?
  • Выполнение параллельных заданий bash в кластере HPC с использованием GNU parallel
  • Проверьте, находится ли удаленный компьютер в кластере Veritas
  • 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

    Как заставить mdstat игнорировать указанные устройства

    Контролирует ли команда «genisoimage» сгенерированное изображение с исходной папкой?

    Могу ли я заставить `cut` изменять файл на месте?

    автоматически создавать суб-интерфейсы VLAN, если они являются частью моста в файле / etc / network / interfaces

    Где я размещаю информацию для Django в Apache2 в Ubuntu

    Должен ли я перечислять модули как в файлах `/ etc / mkinitcpio.conf`, так и` / etc / rc.conf`?

    Больше ничего не видно на консоли после «Начало ядра …»

    Размер данных, которые могут быть записаны / прочитаны из сокетов

    Утерянные учетные данные для виртуальной машины Linux

    Установка корневой файловой системы при загрузке через сеть

    Многоадресный Ethernet-адрес FreeBSD

    Правильный способ создания «постоянного» RAM fs

    Перезагрузка серверов Centos, настроенных с помощью репликации Master / Slave от MYSQL

    AWK Поиск массивного файла и запись в имя переменной

    Являются ли GPG-подписанные OpenBSD ISO, с которыми я могу проверить установочный диск?

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