LINUX.ORG.RU

Скрытое выполнение Python скрипта

 , ,


0

3

Добрый день. Вызываю через exec в PHP python скрипт. Он выполняется около 3 мин. Но дело в том что на время выполнения он оставляет страницу в состоянии загрузки и не выполняется до конца так как у php есть тайм лимит. Как мне сделать так чтобы он выполнился без проблем и страница не грузилась все это время?

Ответ на: комментарий от Jopich1

Это как? Мне результаты вообще не интересны. Надо запустить и забыть

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

Выше два ламера, неспособные прочитать вопрос.

Запускай через обёртку-демонизатор. Или даже просто с & на конце команды.

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

Все равно set_time_limit не даст выполнить весь скрипт

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

& на конце команды.

тогда ещё через nohup и с перенаправлением stdout, stdin и stderr в /dev/null, потому что иначе shell закроется и скрипт получит SIGHUP

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

Запускай через обёртку-демонизатор

Цена такого ответа - ноль.

Какую конкретно обертку? tmux? nonup? systemd? supervisord?

И как конкретно? Кто в итоге будет parent скрипта, если пхп воркер у него завершится?

anonymous
()

nohup /path/to/script &

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

если ты запустишь в шелле

system() работает через sh

о чём я и толкую

eternal_sorrow ★★★★★
()

Выше толпа ламеров. Таким можно убить сервер подержав нажатым «F5» пару секунд, ибо успеет запуститься несколько десятков-сотен скриптов, которые выжрут CPU и память. Правильное решение - сделать очередь заданий, добавлять в неё задания из скрипта и разгребать демоном в фоне в нужное число потоков.

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

Это намного, намного сложнее чем запускать тяжёлый скрипт каждый раз.

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

Передать в скрипт идентификатор и при перезапуске либо прерывать и заново запускать либо ничего не делать. Какое готовое решение может быть если задача неизвестна?

Вру, расхлёбывать очередь до скрипта.

Frost ★★★
()
Последнее исправление: Frost (всего исправлений: 1)
Ответ на: комментарий от Frost

Какое готовое решение

Речь о готовом ПО реализующем настраиваемую или программируемую очередь процессов.

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

чтобы на любой запрос предлагать конкретный продукт в качестве решения

Задача популярная и достаточно общая. Выше кто-то сказал, что можно задействовать очередь, но не назвал ни одного конкретного продукта, который по его опыту такую задачу решает. Т.е. посоветовать ОПу он ничего не может, он просто умничает и набивает скор.

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

Так он самого главного не сказал, что со скриптом делать при повторном запуске. Прослойка то в виде очереди все равно нужна. А прослойку как я понял он и сам сделает.

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

Повторно не запустить. У юзера будут стоять куки на 15 мин, блокирующие повторный запуск. И еще вопрос - как убить все процессы nohup>?

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

Во как. Процессы nohup с чего вдруг висят если повторных обращений нет? И более чем 15 минут такие процессы существуют?

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

Убить - киллом. Но почему они висят? Они на самом деле вообще висеть не должны, ибо при старте превращаются в программу, которую и должны обернуть.

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

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

Можно проще. flock на N файлов. если файл залочен то не нужно запускать новый «поток».

sekreti-gollivuda
()
Ответ на: комментарий от Frost

Состояния у nohup бывает ровно два: завис или запущен без параметров. В других видах он в дикой природе не встречается.

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

Я наверно неправильно выразился. Вот есть у меня 2 скрипта python запущенных через nohup, но вдруг я решил что ожидать их окончания я не хочу. Соответственно хочу их разом завершить.

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

Омг, тебе просто нужны демоны, которые будут рулиться из вебни?

Напиши юнит для systemd/инит скрипт, зарули права через sudoers.d и запускай себе на здоровье, чекай статус, останавливай.

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

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

Ну я же не каждый день такие задачи пытаюсь решить, все к тому же идеи накидывают, вот и смотрю что будет лучше всего

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

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

WitcherGeralt ★★
()

Напиши демона который будет получать команды через сокет и заниматься всем этим. Можно прямо на пхп. Или на питоне с queue, threading и subprocess.

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

nohup не пишет в базу. А полезный процесс nohup запускает через exec (без fork) и этот процесс nohup'ом более не является и в списке процессов значится под своим именем, а не nohup. Ферштейн?

legolegs ★★★★★
()

Очередь в Redis или pub/sub. Скрипт пусть сам в фоне постоянно проверяет задания.

Плюс подхода: скрипт можно быстро перенести на другой сервер.

anonymous
()

Вызываю через exec в PHP python скрипт. Он выполняется около 3 мин. ... Как мне сделать так чтобы он выполнился без проблем и страница не грузилась все это время?

В PHP-FPM можно воспользоваться функцией fastcgi_finish_request.

Ну или запускать python-скрипт в фоновом режиме через специальный демон-процесс, что будет посложнее...

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