0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11

Запуск из одного PHP скрипта другого, не дожидаясь его завершения

05.11.2018, 15:36. Показов 18162. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Имеется php скрипт registratot.php и calculate.php.

Как мне вызывать выполнение calculate.php в registrator.php. При этом registrator.php не должен дожидаться окончания выполнения calculate.php.


Другими слова, один сервер посылает на мой сервер запрос. Мне дается 10 секунд на то, чтобы вернуть строку "ok". Но, перед тем как вернуть эту строку, выполняется один скрипт, который может затянуться до 15-20 секунд. Хочу запускать этот скрипт в фоновом режиме, не дожидаясь окончания выполнения, отправлять "ok".
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2018, 15:36
Ответы с готовыми решениями:

Запуск внешнего скрипта и ожидание его завершения
поможите советом, а лучше кодом )) мне нужно запустив скрипт (VBS) отследить его PID в процессах и по завершению выполнить какое-то...

Запуск одного скрипта из другого
Какими кодами активируются скрипты в VBS? Есть скрипты, нужно чтобы эти файлы запускались другим скриптом. Не аутохоткеем же их кликать....

Запуск одного скрипта из другого
Всем привет! Возникла интересная проблема. Мой скрипт содержит цикл, в котором должен вызываться другой скрипт. при этом вызывающий...

17
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
05.11.2018, 17:51
Запустите задачу в фоне с помощью exec.

Добавлено через 53 секунды
Т.е. вместо include запустите скрипт с помощью Linux-команды.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
05.11.2018, 18:50  [ТС]
Буду благодарен за образец использования команды, ибо когда я использовал
PHP
1
exec('calculate.php > /dev/null &')
то ничего не получилось
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.11.2018, 20:23
Цитата Сообщение от D Apache Посмотреть сообщение
exec('calculate.php > /dev/null &')
Плохая идея так делать. Лучше реализовать какую-либо систему очередей, даже самую примитивную: 1 скрипт записывает задачу в таблицу, другой раз в минуту запускается и берет из таблицы задачи, выполняет и удаляет их.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
05.11.2018, 20:50  [ТС]
Ну тогда у меня проблемой будет, то что придется долго ждать ответ. В частности у меня это необходимо для бота. На сообщение он должен реагировать как можно быстрее (считать, выполнять какую-либо функцию).

Скрипт стоял на кроне, выполняясь каждую минуту, тем самым чтобы дождаться ответа нужно было дождаться начала следующей минуты. Пытался ускорить ответ следующим образом (имитировал крон на каждые пол секунды):
PHP
1
2
3
4
5
6
7
for($i = 0; $i < 120; $i++)
{
$values = Db::get('.....');
$result = myFunction($values);
sendMessage($result);
unsleep(500000);
}
Но фиг его знает, это не дало никакого ускорения.
0
Эксперт PHP
3887 / 3227 / 1351
Регистрация: 01.08.2012
Сообщений: 10,882
05.11.2018, 22:36
Цитата Сообщение от D Apache Посмотреть сообщение
unsleep
Такой функции нет, есть usleep.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
05.11.2018, 22:43
D Apache, vps или хостинг?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
06.11.2018, 06:56
Цитата Сообщение от D Apache Посмотреть сообщение
Скрипт стоял на кроне, выполняясь каждую минуту, тем самым чтобы дождаться ответа нужно было дождаться начала следующей минуты.
CRON можно не использовать. Для системы очередей, как правило, используется daemon (только нужно следить за его состоянием, чтобы перезапускался, если умирает; есть специальные программы для этого).

Добавлено через 2 минуты
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Плохая идея так делать.
Что-то я сплоховал.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
06.11.2018, 16:41  [ТС]
По поводу unsleep, да это тут ошибся при написании.

Использую хостинг.
0
462 / 427 / 116
Регистрация: 15.02.2012
Сообщений: 1,931
06.11.2018, 17:04
Лучший ответ Сообщение было отмечено D Apache как решение

Решение

Крон не всегда удобно использовать из-за его временной ограниченности запуска, демона писать, тоже так себе затея, его контролировать нужно.
у меня в проекте такой вариант используется
PHP
1
2
3
4
5
6
...
$nextarr='randstring='.$requestArr['randstring'];
    $nextarr.='&action='.$action;
...
    exec("/usr/bin/wget --post-data '".$nextarr."' -O - -q  http://site.ru/app/set_calk.php? > /dev/null &");
...
т.е. в $nextarr я собрал данные от которых зависит вызов и отдельно его запустил, когда он закончится мне уже не важно, в этом скрипте я уже отдал статус что все хорошо и забыл про это.
Единственное чтобы контролировать хоть как-то приходится лог вести: собрал данные, отправил, и в вызываемом файле отметка что все обработано. это из-за того что бывают ошибки в данных.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.11.2018, 17:07
tgarl, этот вариант ничем не отличается от указанного выше exec('calculate.php > /dev/null &'). Так делать не хорошо.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
06.11.2018, 19:34  [ТС]
Крон не всегда удобно использовать из-за его временной ограниченности запуска, демона писать, тоже так себе затея, его контролировать нужно.
у меня в проекте такой вариант используется

PHP
1
2
3
4
5
6
...
$nextarr='randstring='.$requestArr['randstring'];
    $nextarr.='&action='.$action;
...
    exec("/usr/bin/wget --post-data '".$nextarr."' -O - -q  http://site.ru/app/set_calk.php? > /dev/null &");
...
т.е. в $nextarr я собрал данные от которых зависит вызов и отдельно его запустил, когда он закончится мне уже не важно, в этом скрипте я уже отдал статус что все хорошо и забыл про это.
Единственное чтобы контролировать хоть как-то приходится лог вести: собрал данные, отправил, и в вызываемом файле отметка что все обработано. это из-за того что бывают ошибки в данных.
А как у тебя $nextarr используется в set_calk.php?
0
462 / 427 / 116
Регистрация: 15.02.2012
Сообщений: 1,931
07.11.2018, 09:38
Цитата Сообщение от Jewbacabra Посмотреть сообщение
этот вариант ничем не отличается от указанного выше
Да, но это пример привел для указания, что так можно и в боевом проекте.
Так делать не хорошо.
Поясните причину. Писать демона, который будет постоянно крутиться, писать дополнительный скрипт который будет проверять, а не отвалился ли демон, так как любой чих и демон перестал работать.(возможно если на bash его делать или еще чем-то, то все по другому, но с php у меня остались только негативные впечатления) и все это ради нескольких запросов в день.
А как у тебя $nextarr используется в set_calk.php?
это обычные реквест-данные
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
07.11.2018, 10:27
tgarl, нехорошо поскольку этот процесс становится дочерним для менеджера процессов php (apache или php-fpm), который не расчитан на такое поведение, и никто не гарантирует что это будет работать всегда (php-fpm например кидается варнингами на такие процессы). Также нет никакого контрооя за этими процессами. Для серьезных прректов в бою такое не допустимо.
Есте же готовые нормальные менеджеры очередей типа RabbitMQ.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
07.11.2018, 11:11  [ТС]
Всем спасибо. Пока решил эту проблему так:
PHP
1
 exec('php test.php '.$user.' '.$message.' > /dev/null 2>/dev/null &');
0
462 / 427 / 116
Регистрация: 15.02.2012
Сообщений: 1,931
07.11.2018, 11:50
Есте же готовые нормальные менеджеры очередей типа RabbitMQ.
только для этого уже нужно разбираться как установить на сервер программу, как ее настроить, умение работать с консолью... а это уже несколько иной уровень знаний
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
07.11.2018, 11:54
tgarl, это уровень знаний любого адекватного специалиста
0
462 / 427 / 116
Регистрация: 15.02.2012
Сообщений: 1,931
08.11.2018, 10:01
Можете считать меня неадекватным сколько угодно, но я с вами не соглашусь. Это всего лишь уровень к которому нужно стремиться. Потому как с cерверами программист php разбираться не должен. Так же он не должен хорошо знать верстку и дизайн или к примеру asp. Это все разные области. Стремиться к саморазвитию и познанию других систем да, это хорошо. Но для работы с другими языками или системами есть другие специалисты. Просто сейчас работодатели ходят видеть универсалов, а большинству приходится если хотят работать идти на поводу из-за страха если я скажу что это ко мне не относится, мое место займет другой кто скажет "есть, будет сделано" и увы так и будет.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2018, 10:01
Помогаю со студенческими работами здесь

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

Запуск одного скрипта perl из другого
Всем привет, почему то перестала работать конструкция вида: my $name = &quot;test&quot;; our $iparam = $name; do...

Запуск скрипта для анализа папки и запуска другого скрипта
Мне нужно написать скрипт, который каждую секунду (или 5 сек) сканировал определенную папку на поиск определенного файла. Например...

Как из одного скрипта изменить переменную (int) другого скрипта?
У меня есть два скрипта (money который отвечает за общее количество денег и CarBuy который отвечает за покупку машины). Мне нужно, чтобы...

Unity - Обращение к публичным полям одного скрипта из другого скрипта
Привет. Скрипты пишу на CSharp. В одном gameObject (назовем его HelloObject) есть два скрипта - Script1 и Script2. У script2 есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru