Инструмент C ++ внутри контейнера Singularity: прямое выполнение нормально, но выполнение внутри скрипта Bash внутри того же контейнера завершается с недопустимой инструкцией - PullRequest
0 голосов
/ 25 марта 2019

Я сталкиваюсь со странной проблемой при запуске исполняемого файла C ++ (инструмент Gromacs editconf), который был скомпилирован внутри контейнера Singularity. Контейнер был построен на моей локальной машине и перенесен в небольшой вычислительный кластер, где я наблюдаю следующее:

Когда я непосредственно выполняю команду Gromacs ("gmx editconf" с парой аргументов), она отлично работает:

singularity exec image.simg gmx editconf -bt octahedron -f complex.pdb -o complex.pdb -box 8

Но как только я пытаюсь выполнить его через скрипт Bash внутри контейнера

singularity exec image.simg /bin/bash /opt/prep_stuff.sh $ARG1 $ARG2

, который, в свою очередь, запускает инструмент Gromacs вот так

gmx editconf -bt octahedron -f complex.pdb -o complex.pdb -box 8

вылетает с ошибкой

/opt/prep_stuff.sh: line 109: 27326 Illegal instruction     (core dumped) gmx editconf -bt octahedron -f complex.pdb -o complex.pdb -box 8

в то время как все остальные шаги в этом скрипте Bash выполнены правильно. Кроме того, строка 109 (начало цикла for) появляется задолго до фактического вызова gmx editconf.

Кто-нибудь имеет представление о том, почему два подхода ведут себя по-разному, хотя и выполняются на одной и той же машине? Мне нужно, чтобы он работал в соответствии с подходом Bash-скрипта.

Большое спасибо!

...