Назад | Перейти на главную страницу

Каковы лучшие практики написания сценариев параллельного запуска в оболочке Unix (ksh, bash)?

У меня есть часть программного обеспечения с различными компонентами, работающими на одной машине Unix (веб-сервер, СУБД, промежуточное ПО, разные демоны). Запуск нескольких компонентов зависит от успешности запуска предыдущих (например, СУБД). Некоторые скрипты можно запускать параллельно. Есть ли элегантный подход, позволяющий контролировать такую ​​зависимость скриптов и легко использовать механизм распараллеливания, а также максимально быстро запускать компоненты.

Аналогичные решения для загрузочного скрипта покрываются выскочкой http://upstart.ubuntu.com/ поэтому я ищу нечто подобное, что позволило бы мне управлять собственными подсистемами.

Debian реализован запуск на основе зависимостей на Squeeze, вам стоит взглянуть на него. На странице руководства insserv также есть некоторая информация о заголовках LSB, необходимых для его работы.

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

Конечно, все документы относятся к Debian, но я уверен, что другие дистрибутивы могут использовать что-то близкое.

если у вас есть способ узнать, в порядке ли служба, не полагаясь на код выхода, вы можете ПОЦЕЛУЙ ее с помощью сценария оболочки, используя wait, например

#!/bin/bash

start_parallel_service_1 &
start_parallel_service_2 &
start_parallel_service_3 &

wait # this will wait until all startup scripts exited

check_parallel_service_1 || exit
check_parallel_service_2 || exit
check_parallel_service_3 || exit

echo all ok