LINUX.ORG.RU

Дайте советов, по запуску скриптов в фоне.

 ,


1

3

Есть набор скриптов(Perl, Bash), каждый выполняет 1 задачу, скрипту надо передать набор параметров, и получить результат. Есть таблица в бд в которой хранится список задач. Примерно такая:

id - id источника задачи - задача( в виде названия скрипта) - параметры - результаты (json массив) - статус (выполнено\не выполнено)

Соответственно после отработки скрипта, результат надо записать в БД и ставится статус выполнено.

Скрипт может работать произвольное время. (до нескольких минут). Задач может стать очень много по этому нужна многопоточность, по той же причине запуск проверки новых задач и отправки их на выполнение по крону кажется тоже не подойдет.

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

Спасибо.


Задач может стать очень много по этому нужна многопоточность

Зачем тут многопоточность, если у тебя и так по условию задачи являются отдельными процессами? Просто запустить их все в фоне, а затем при помощи wait()/waitpid()/waitid() ждать пока завершатся.

mironov_ivan ★★★★★ ()

статус (выполнено\не выполнено)

Добавь статус «Выполняется», «Выполнено не удачно», а «не выполнено» = «Не выполнялось»

Пишешь обертку которая каждую единице времени читает БД, выбирая строки где статус == не выполнялось, потом на основании выбранных данных запускаешь скрипты, меняя соответственно статус в БД на «выполняется». Контроль результатов и соответствующие отметки в БД предлагаю поручить самим скриптам.

alozovskoy ★★★★★ ()

Обычно использую такую схему: задачи в таблице БД - планировщик задач (и здесь формируется очередь) - ферма воркеров.

Когда в таблицу попадает задача, база уведомляет об этом подписчиков, планировщик подписан на эти ивенты, он вытаскивает задачу из таблицы и перестраивает очередь. Если в очереди есть задачи которые можно выполнить и есть свободные воркеры, то отправляется запрос к ферме воркеров (в моем случае это легкий web-сервер на Perl) - передается один параметр (id из таблицы с задачами). Как только воркер закончит работу, он удалит задачу из БД (он же знает id задачи), триггер в БД уведомит подписчиков и планировщик задач перестроит очередь.

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

Контроль результатов и соответствующие отметки в БД предлагаю поручить самим скриптам.

Каждому скрипту придется знать о БД, как туда писать и прочие подробности?

RaDiSt ()
Ответ на: комментарий от outtaspace

Описано интересно, нет ли где чего то подобного опенсорсного, что бы в исходниках покопаться?

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

Увы, не знаю где такое искать. Сам писал с нуля на Perl (Mojolicious) + Pg (он умеет pub/sub через listen/notify), у меня решение сильно завязано на уже существующий проект и поэтому нет смысла опенсорсить.

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

Хорошо, пусть результаты возвращает запустившему его скрипту - о БД будет знать только он.

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