LINUX.ORG.RU

BASH: Выполнение скриптов по аналогии с init скриптами. С приоритетом и зависимостями.

 ,


0

1

Здравствуйте.

Есть необходимость в запуске группы файлов, согласно выставленному приоритету и зависимостям между собой.

К примеру, т.к. это реализовано в init механизме запуска стартап скриптов. С применением LSBinit (http://wiki.debian.org/LSBInitScripts с поправкой на выполнение не при старте, а в любой момент, к примеру как run-parts и к примеру через крон).

Вот только никакого «родного» скрипта в ОС я не нашел.

Изобретать новый и блестящий велосипед особого желания нет. Должно же что нибудь быть родное, но вот только что?

Никто не сталкивался с такой поделкой? Или все таки придется брать за основу update-rc.d скрипт и допиливать его под свои нужды?

Перемещено beastie из general


Звучит странно, но, может быть, воспользоваться Makefile?

AITap ★★★★★
()

1. А почему бы не использовать стартовые скрипты? Просто в автозагрузку не ставить.
2. Если имя процесса - детерминировано, то можно проверять запущенность процесса, а потом запускать следующий. Естественно, должен быть файлик, которй описывает последовательность и зависимости.
3. Если не 2, то можно сохранять инфу о запущенных процессах где-то в /tmp

Ты лучше задачу опиши; чудится мне что «запуск группы файлов, согласно выставленному приоритету и зависимостям между собой» - всего лишь инструмент, то есть то, как ты задумал это сделать. А что конкретно тебе нужно сделать?

Kroz ★★★★★
()

Есть необходимость в запуске группы файлов, согласно выставленному приоритету и зависимостям между собой.

make. Хотя вообще не понятно, зачем тебе это нужно.

drBatty ★★
()

Изобретать новый и блестящий велосипед особого желания нет.

а он несложный: симлинки+run-parts

lazyklimm ★★★★★
()
Ответ на: комментарий от anonymous

Ждал этого ответа. Молодец. Лучший ответ месяца.

ast82
() автор топика
Ответ на: комментарий от justAmoment

Честно говоря нет, сам по себе systemd еще не смотрел. Основное (99%) количество серверов на debian, а systemd сейчас в тестовой ветке. Не присматривался пока. Но с ссылкой ознакомился. Обязательно поближе познакомлюсь с демоном. Спасибо.

ast82
() автор топика
Ответ на: комментарий от Kroz

Ты лучше задачу опиши

В двух словах, модифицируем систему автонастройки(автокорректировки) сервисов, прав, данных в базах, конфиг файлов, содержимое, список пакетов для данного сервера из категории и т.д. Но базируется она у нас на простых операциях. Т.е. раз в сутки запускается скрипт, который смотрит что надо сделать с сервером, если есть необходимость. А необходимость иногда появляется. В общем работа, которую делает системный администратор, и иногда вручную, тут естественно все на автомате. так сказать первичное обслуживание сервера.

Если разбить на простые операции, то это набор скриптов. Некоторые самостоятельные, некоторые зависят друг от друга.

Использовать симлинки - их надо перестраивать после изменения набора «патчей».

Самое оптимальное что видел в данной ситуации я - это так как ты предложил. Собственный аналог run-parts, который будет строить последовательность запуска скриптов. Только не сохранять список в /tmp, а построил, и выполнил. Самое простое будет, как оказалось. Тем более что за основу стартового скрипта можно взять update-rc.d. Он на перловке.

п.с.: Теперь наверное надо ждать от всех кто не «школота» сообщения в духе собери свой пакет, man dpkg-...., man makefile

Ребята, честно. в нашем случае данный механизм не удобен, поэтому и не используем. А не потому что маном пользоваться не умеем.

ast82
() автор топика

В кроне есть параметр @reboot. Правда, ЕМНИП, он не срабатывает после старта выключенной машины.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

это не интересно :) понять что сервер загрузился не проблема :) хоть через крон, хоть любым другим методом :) Только зачем? Загрузился, появился интернет, получил сценарии, отработал по графику. И теперь ты полностью обновленный сервер. Если задача критичная, то после получения новых инструкций, обновится немедленно. В случае непредвиденных или предвиденных но не исправляемых ошибок, оповестили ТП о проблеме. Все.

ast82
() автор топика
Ответ на: комментарий от ast82

Мне кажется, что можно попроще. init-скрипты все-же писались для тяжелых условий; а у тебя можно обойтись и таким:

Рекомендую кроме скриптов создать 2 файлика. Первый файлик будет определять зависимости:

script1 dependency1,dependency2
script2 dependency3
dependency1 dependency4,dependency5
Второй - последовательность запуска скриптов:
script2
script1
Дочтаточно простым скриптом, который пишется минут за 10-20, мы парсим эти файлики и запускаем как надо. Пока что в этой схеме 3 недостатка: нет отслеживания кольцевых зависимостей, дважды запускаемых скриптов, и нет параллелизации. Но и это тоже легко добавляется если нужно.

А знаешь что самое замечательное? Еще одним несложным скриптом это преобразуется в что-то вида:

digraph scripts {
root->script1
root->script2
script1->dep1
script1->dep2
...
}
и одной коммандой преобразуется в что-то типа такого: http://www.graphviz.org/Gallery/directed/unix.html . Красиво? Наглядно? Как идея? ;)

Со скриптами могу помочь, хотя что-то мне говорит, что ты и сам справишься.

Kroz ★★★★★
()
Ответ на: комментарий от shell-script

Правда, ЕМНИП, он не срабатывает после старта выключенной машины

Еще как срабатывает. Правда, насколько я понял, ТС хочет не этого

solovey ★★
()
Ответ на: комментарий от Kroz

Отдельное спасибо за graphviz, действительно полезно. Идея в итоге получится и функциональная и визуально легко распозноваемо. Обязательно воспользуюсь.

А по поводу скриптов, соглашусь с тобой. Самый разумный вариант. Только эту часть оставлю автоматике. Пускай собирает их перед запуском, вручную делать не сильно хочется.

Kroz, большое спасибо за диалог.

ast82
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.