Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> bash запуск несколько процессы дождаться всех, bash запуск несколько процессы дождаться 
V
    Опции темы
DukeCpp
Дата 2.5.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 27.2.2006
Где: St.Petersburg

Репутация: нет
Всего: 1



Уважаемые участники форума, здравствуйте!

собственно, сабж;
Искал по форуму по указанным ключевым словам; найти ответов, к сожалению, не удалось. 
Господа, обращаюсь к вам.

хочу написать скрипт на баше, который будет запускать несколько процессов одновременно, а по окончании последнего из запущенных (не раньше!) продолжить делать действия.
сейчас это делается в два скрипта:
runApps.sh:
Код

./myApp -name "myName" &
./myApp -data "someOtherData" &


они делают вычисления, в процессе которых пишут файлы. Когда всё отработало, я запускаю файл что-то типа:

Код

cat ProcessedData1.txt ProcessedData2.txt >> ProcessedDataResults.txt


Это упрощённая схема: окончание каждого запущенного myApp зависит от внешних факторов, поэтому тот процесс, который был запущен ранее, хоть на 2 дня, может завершиться последним, и его тоже надо дождаться, прежде чем процессить ProcessedDataResults.txt
 
Вопрос: 

Как избежать ручной работы и самостоятельного мониторинга процессов и возложить всё это на bash? 
Заране благодарен за содействие!

Это сообщение отредактировал(а) DukeCpp - 2.5.2009, 22:36
PM   Вверх
powerfox
Дата 3.5.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Код

./myApp -name "myName" &
pid1=$!
./myApp -data "someOtherData" &
wait $! #Wait second process
wait $pid1




--------------------
user posted image
PM WWW   Вверх
Vaulter
Дата 3.5.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



погрешность в секунду определения живости по PID:

Код


check_process_pid()
{
    local pid=$1
# If the process has already failed, which sometimes happens, then kill will return 1.
    if kill -0 $pid > /dev/null 2>&1 ; then 
        return 0;
    fi
    
#    echo "DEAD" >> ${PROCESS_STATUS_FILE}
    return 1
}

#echo -n "Stopping process $PID..."
#            kill $PID
            #constant quering
            local t=10 #10 secs
            while [ 0 -lt $t ] && check_process_pid $PID; do echo -n "."; sleep 1; let t=t-1; done

echo "PROCESS $PID DEAD";



конечно, тут следует расширить этот скрипт для нескольких пидов... проверочка будет просто погуще
smile
зы: код только отчасти мой, кусать не сильно


--------------------
PM MAIL WWW ICQ   Вверх
nickless
Дата 3.5.2009, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 41
Всего: 181



Код

#!/bin/bash

echo start

(echo "sleep two"; sleep 2; echo two) &
(echo "sleep one"; sleep 1; echo one) &
(echo "sleep three"; echo three) &

echo "before wait, jobs:"
jobs -lp

wait

echo end


Добавлено через 2 минуты и 15 секунд
Хех, когда вы успели smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
bilbobagginz
Дата 3.5.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



DukeCpp, в принципе кончено в bash существует команда wait.
т.е. в главном скрипте запускаешь свои джобы, и собираешь их pidы.:
допустим у тебя есть скрипты вычислений. calc[1...N].sh, N=10
делаешь:
Код

PIDS=""
I=1
LIM=10
while [ $I -le $LIM ]
do
  ./calc${I}.sh &
  if [ -z $PIDS ]; then
    PIDS="$!"
  else
    PIDS="${PIDS} $!"
  fi
  I=$(( $I + 1 )
done
# внимание: постой паровоз, не спешите колёса:
wait ${PIDS}
# wait - будет ждать выхода всех pid-ов из списка PIDS
# и тут уже можно запустить скрипт "сборки" gatherdata.sh:
./gatherdata.sh

воть, однако это всё очень ограничено, и не берёт в счёт различные комбинации, а также ограничено на 1 компьютер (ну не совсем, но всё же)

Цитата(DukeCpp @  2.5.2009,  22:33 Найти цитируемый пост)
Как избежать ручной работы и самостоятельного мониторинга процессов и возложить всё это на bash? 
Заране благодарен за содействие!

для того, что вы делаете существуют специальные пакеты ПО.
это называется job scheduling management.
я знаю точно, что такую задачу смогут сделать"
  • condor
  • lsf
  • PBS - тебя интересует бесплатная версия "openpbs"
"лично знаком" только с первым вариантом, но он очень удобен (по-моему), и хорошо работает на нескольких системах (linux, windows, solaris, mac, freebsd, и более ), и позволит тебе заюзать все "свободные" компы, напр. минут 20 после того, как они не использовались локально. 

тебя интересует конфигурация DAG (т.е. directed acyclic graph). такая конфигурация позволяет запустить несколько зависимых групп независимых подзадач. вот мануал основной:
http://www.cs.wisc.edu/condor/manual/v7.2/
(скачай сам пакет, потом пройдись по установке, и фокусируйся на user manual)

вот еще ссылки на самоучитель:
http://homepages.nesc.ac.uk/~gcw/NGS/Condor.html
http://homepages.nesc.ac.uk/~gcw/NGS/Condor2.html

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

удачи.


Это сообщение отредактировал(а) bilbobagginz - 3.5.2009, 08:03


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
DukeCpp
Дата 3.5.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 27.2.2006
Где: St.Petersburg

Репутация: нет
Всего: 1



вот это даsmile

powerfox
да-с, всё гениальное просто. Расширить циклом уже смогу;) Благодарю! 

Vaulter,
Код

let t=t-1
 
это, как я понимаю причина погрешности в секунду? То есть дату процессить начнём с самым большим опозданием в секунду после заврешнеия последнего, так?
Ну, на самом деле, погрешность чисто символическая, если учесть, что процессы выполняются от десятков минут. 
Спасибо за просто готовый ответ!

nickless
Да! Большое спасибо-с! Именно.
Код

jobs -lp


я так понял, что оно собирает PID-ы всех запущенных этим скриптом процессов? А wait ждёт всех процессов, которые были "даны свыше"?

bilbobagginz

Великоблагодарю за столь исчерпывающий ответ. В мемориз, однозначно; когда подойду к задаче более сложной диспетчирезации и расрпределения задач, обязательно взгляну lsf и PBS. Пока что совершенно удовлетворён предложенными решениями на bash/Perl, ну а после -- condor, как-то подружественнее показалсяsmile


Вопрос помечаю решённым.
Товарищи, Благодарю! 

Это сообщение отредактировал(а) DukeCpp - 3.5.2009, 15:49
PM   Вверх
bilbobagginz
Дата 3.5.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



Цитата(DukeCpp @  3.5.2009,  15:48 Найти цитируемый пост)
bash/Perl

это всё на баше, просто пока нет синтаксис-подсветки для баша, юзаю перловую подсветку.
кондор однозначно рекомендую: на изучения нужно всего 1-2 часика. очень прост, и его элементарно можно настроить в любой лаборатории, заюзав этим все ресурсы.
(там только надо чтобы сеть была настроена корректно: dns (direct/reverse), time, желательно иметь какой-то единый юзеровый домен - ldap/nis)

конечно если лень прогу править почаще, то лучше всё запускать на 1-м компе, и говорить своему ректору "запустил, пока бежит, когда будут новости - сообщу".
но если жалко времени жизни, то подход меняется  smile 













--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
nickless
Дата 4.5.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 41
Всего: 181



Цитата(DukeCpp @  3.5.2009,  14:48 Найти цитируемый пост)
я так понял, что оно собирает PID-ы всех запущенных этим скриптом процессов? А wait ждёт всех процессов, которые были "даны свыше"?

Нет, jobs просто выводит список на процессов работающих на данный момент в бэкграунде, а wait без параметров ждёт завершения всех процессов запущеных прежде из этого шелла. Если из того же скрипта не запускаются другие процессы, которых ждать не надо, то этого вполне достаточно.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1060 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.