Форум программистов, компьютерный форум CyberForum.ru

Скрипт для запуска программы - C++ Linux

Восстановить пароль Регистрация
 
KepDbIk
2 / 2 / 0
Регистрация: 28.03.2014
Сообщений: 16
27.12.2016, 02:34     Скрипт для запуска программы #1
Всем привет! Не знаю, куда правильнее написать, поэтому пока сюда.
Написал программу в windows, но ее нужно запустить на линуксе (запуск удаленный, если что). Я в скриптах ничего не понимаю, поэтому мне дали два файла для запуска. Один из них:
Bash
1
2
3
4
5
6
7
8
#!/bin/sh
#PBS -l nodes=10:ppn=1
#PBS -e node-037:
#PBS -o node-037:
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:/usr/lib64/openmpi/lib/openmpi
 
hostname
/usr/lib64/openmpi/bin/mpiexec -mca btl openib,self -x LD_LIBRARY_PATH==/usr/lib64/openmpi/lib:/usr/lib64/openmpi/lib/openmpi -machinefile $PBS_NODEFILE $PBS_O_WORKDIR/rent_main_2
Да, программа выполнилась, но в ней (rent_main_2) было запрограммировано создание файла (.txt) с результатами работы, который, собственно, и не создается. (Этот скрипт создает логи выполнения программы (файл успешного выполнения и файл ошибок), поэтому сразу подумал на него). Возможно, дело и не в скрипте. Но если в нем, то напишите пожалуйста, как мне решить проблему создания этого файла. Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2016, 02:34     Скрипт для запуска программы
Посмотрите здесь:

C++ Linux [C++] Какие флаги указать линкеру для компиляции программы?
C++ Linux Контроль запуска одной копии приложения
Нужно написать скрипт управления процессом C++ Linux
Параметр запуска программы C++ Linux
Как связать скрипт .sh с проектом в NetBeans? C++ Linux
Ошибка "Permission denied" при попытке запуска программы C++ Linux
Создать две программы для записи информации в FIFO и чтения из нее C++ Linux
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RefSol
225 / 164 / 39
Регистрация: 31.10.2010
Сообщений: 512
27.12.2016, 03:11     Скрипт для запуска программы #2
KepDbIk, а компилировали программу на C++ тоже в Windows?
вопрос снят
KepDbIk
2 / 2 / 0
Регистрация: 28.03.2014
Сообщений: 16
27.12.2016, 03:23  [ТС]     Скрипт для запуска программы #3
RefSol, я не написал - на удаленном компьютере есть компилятор для с и с++.
я просто закидываю туда мой *.срр или *.с и два файлика со скриптами (первый, как я понял, для запуска компиляции и выполнения, а второй для создания файлов ("успешности" и ошибок) после выполнения программы. его текст я представил выше)
RefSol
225 / 164 / 39
Регистрация: 31.10.2010
Сообщений: 512
27.12.2016, 03:55     Скрипт для запуска программы #4
KepDbIk, тогда для понимания что Вам надо прикрепите листинг С++. Проще всего написать простую программу на С++, точно работающую как надо и на ней уже отлаживать скрипт.
Humanoid
Почетный модератор
 Аватар для Humanoid
9870 / 3765 / 147
Регистрация: 12.06.2008
Сообщений: 11,346
27.12.2016, 11:10     Скрипт для запуска программы #5
Из какой директории запускаете скрипт? Может, он создаёт в текущей директории... например, в /home/<user> ?
KepDbIk
2 / 2 / 0
Регистрация: 28.03.2014
Сообщений: 16
27.12.2016, 11:43  [ТС]     Скрипт для запуска программы #6
Humanoid, да нет, я облазил все что можно и нигде не нашел. да и создаваться он должен, я думаю, как и в windows, в папке с исходным кодом (т.е. собственно туда, куда я и закидываю все мои файлы)
п.с. все скрипты и остальные файлы я закидываю в одну "рабочую" папку на том компьютере.

Добавлено через 4 минуты
RefSol, текст программы не из самых маленьких, поэтому для отладки механизма запуска я использую самую упрощенную версию, в которой в .txt записывается результат 2+2) да и от самого текста моей программы ничего не зависит, как мне объяснили.
RefSol
225 / 164 / 39
Регистрация: 31.10.2010
Сообщений: 512
27.12.2016, 11:49     Скрипт для запуска программы #7
KepDbIk, программа может запускаться, но работать не корректно, или ни чего не выводить, поэтому проверять скрипт лучше на программе которая работает просто и выводит любые тестовые данные, хоть "2х2". Об этом Вам и писал ранее.
Есть ли у пользователя от имени которого запускается скрипт права на запись в данную директорию?
AlexVRud
420 / 149 / 37
Регистрация: 04.07.2014
Сообщений: 421
27.12.2016, 13:44     Скрипт для запуска программы #8
KepDbIk, для начала вам прислали не просто скрипт запуска, а пример скрипта-задания для системы управления заданиями PBS Pro (или Torque).

Вычисления, вы собираетесь запускать на кластере.

Поэтому рекомендация: связаться с администраторами вашего вычислительного кластера и пройти у них мини курс по основам запуска MPI заданий на кластере.

В вашем случае:

Bash
1
#!/bin/sh
- большинство скриптов в Linux начинаются с такой строки-комментария в которой говорится какой программой он должен выполняться.
Поучите написание скриптов на bash: http://rus-linux.net/nlib.php?name=/...uide-02-2.html

Bash
1
2
3
#PBS -l nodes=10:ppn=1
#PBS -e node-037:
#PBS -o node-037:
Эти строки-комментарии предназначены для системы управления заданиями на кластере. Первая просит 10 узлов по одному процессору на каждом. Ни или по простому: вы просите выделить вам 10 ядер процессоров, на любых серверах (хоть на одном, хоть на нескольких).
Следующие две строки задают имена выходных файлов. Мой совет их убрать из скрипта.

Bash
1
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:/usr/lib64/openmpi/lib/openmpi
Таким образом вы говорите где лежат библиотечные файлы OpenMPI. Способ очень странный, обычно можно встреть более универсальный module load opnempi, но для этого должен быть настроен кластер. Уточните пример запуска заданий в справке по работе с кластером.

Bash
1
hostname
Просто выведет имя сервера на котором PBS/Torque запустил реально вашу задачу.

Bash
1
/usr/lib64/openmpi/bin/mpiexec -mca btl openib,self -x LD_LIBRARY_PATH==/usr/lib64/openmpi/lib:/usr/lib64/openmpi/lib/openmpi -machinefile $PBS_NODEFILE $PBS_O_WORKDIR/rent_main_2
В этой строке вам надо менять только rent_main_2 на имя вашей скомпилированной программы.

Хотя у меня опять претензия ко всей этой строке. Большинство параметров здесь должны были быть настроены администратором кластера.
На большинстве кластеров такой скрип сводится к

Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
#PBS -N mpi_hello
#PBS -l select=10
 
module load openmpi
 
cd $PBS_O_WORKDIR
 
mpiexec ./mpi_hello_program_name
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2016, 19:15     Скрипт для запуска программы
Еще ссылки по теме:

C++ Linux Написание программы для того чтобы парсить логи Squid

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KepDbIk
2 / 2 / 0
Регистрация: 28.03.2014
Сообщений: 16
27.12.2016, 19:15  [ТС]     Скрипт для запуска программы #9
RefSol, AlexVRud, большое спасибо за ответы! буду пробовать отлаживать мою программу.
AlexVRud, спасибо, что расписал, что все это значит (да, я уже читал про скрипты и пытался разобраться как они пишутся). Скрипт запускает другой, тестовый проект, который есть на кластере, поэтому полагаю, что он должен быть корректным. Если будут еще вопросы, а они наверняка появятся)) , то напишу сюда.
Yandex
Объявления
27.12.2016, 19:15     Скрипт для запуска программы
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru