Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Асинхронный запуск скрипта из другого скрипта  [new]
Pupkin
Member

Откуда:
Сообщений: 94
Есть два скрипта. Первый подготавливает параметры запуска 2-го скрипта и запускает его.

<?php
...
$par1=nnn;
$par2=mm;
shell_exec('vtoroj.php '.$par1.' '.$par2);
...
?>

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

А как, чтобы не ждал?
5 янв 19, 13:32    [21778717]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
vkle
Member

Откуда: Самара
Сообщений: 14626
Выполнять вызываемую программу в фоне. Символ &
5 янв 19, 14:33    [21778741]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13505
В конце команды добавь &
5 янв 19, 17:30    [21778808]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
vkle
Member

Откуда: Самара
Сообщений: 14626
Или можно почитать дальше книжку по основам запуска программ в операционной системе. До передачи аргументов в команду запуска дочитали же. :)
5 янв 19, 17:33    [21778811]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13505
https://symfony.com/doc/current/components/process.html
Вот, не благодари!
5 янв 19, 17:50    [21778820]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Pupkin
Member

Откуда:
Сообщений: 94
vkle
Выполнять вызываемую программу в фоне.
Чтобы выполнялось асинхронно, оказывается, надо выполнять в фоне. Я даже удивляюсь - как это я сам не догадался? Чтобы каша была с маслом, надо добавить масла. Вот!
В конце команды добавь &
На всяк случай привожу команду дословно (добуквенно):

shell_exec($execPointer.' '.$fromDate.' '.$toDate.' '.$page.' \''.$groupEvent.'\'');

Господа советчики, очень прошу - снизойдите от своего корифейства и укажите конкретное место в shell строке, куда приткнуть "&".
8 янв 19, 09:19    [21779758]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
vkle
Member

Откуда: Самара
Сообщений: 14626
Pupkin
Господа советчики, очень прошу - снизойдите от своего корифейства и укажите конкретное место в shell строке, куда приткнуть "&".
Амперсанд ставить в самый конец команды, поле параметров, если они есть.
И, если возникнут трудности, так уж сделайте, хотя бы, обещанное Вами - приведите команду полностью, а не в виде свалки ничего не говорящих переменных.
8 янв 19, 09:43    [21779763]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Pupkin
Member

Откуда:
Сообщений: 94
vkle
приведите команду полностью


$fromDate и $toDate - даты из db в формате гггг-мм-дд
$page - число int от 1 до теоретически неограниченого
$groupEvent='Sync goods';

В db 10 записей с числом от 0 до 9 и их "занятость". Изначально все не занято.

возврщает первое свободное число из db в $paramId (или ожидает оное)
while(($paramId=GetFreeThreadId($GLOBALS['dbCnn']))==='') usleep(50000);

формируется некий номер в $thrNr, используемый далее как часть имени.
$thrNr=$GLOBALS['paramId']-3; // Warning!!! For 0-th thread ParamId=3 etc. to 12

формируется имя запускаемого скрипта вида SubSyncId_N.php, где N - число 0..9.
скрипты загодя существуют, отличаются только именем и ждут запуска
$execPointer='php SyncThreads/SubSyncId_'.$thrNr.'.php';

устанавливается "занятость" числа в db (занятость данного скрипта)
UpdateValueInDb('params','Value','1','ParamId='.$thrNr,$groupEvent);

запускается скрипт
$cmd=$execPointer.' '.$fromDate.' '.$toDate.' '.$page.' \''.$groupEvent.'\'';
shell_exec($cmd);

запускаемый скрипт анализирует параметры как соответствующие $argv[] и,
сделав свою задачу, благополучно умирают (выходят).
А умираючи обновляют свою "занятость" в базе на "не занятость".

---- еще раз

$fromDate и $toDate - даты из db в формате гггг-мм-дд
$page - число int от 1 до теоретически неограниченого
$groupEvent='Sync goods';
while ($page) //их много
{
while(($paramId=GetFreeThreadId($GLOBALS['dbCnn']))==='') usleep(50000);
$thrNr=$GLOBALS['paramId']-3; // Warning!!! For 0-th thread ParamId=3 etc to 12
$execPointer='php SyncThreads/SubSyncId_'.$thrNr.'.php';
UpdateValueInDb('params','Value','1','ParamId='.$thrNr,$groupEvent);
$cmd=$execPointer.' '.$fromDate.' '.$toDate.' '.$page.' \''.$groupEvent.'\'';
shell_exec($cmd);
$page++;
}
8 янв 19, 11:44    [21779807]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Pupkin
Member

Откуда:
Сообщений: 94
vkle
Или можно почитать дальше книжку по основам запуска программ в операционной системе. До передачи аргументов в команду запуска дочитали же. :)

Не надо про книжку, ее нет! Плохо искал? Может быть.
Зато нашел немерянное количество ЧерезЖопных предложений,
а так же "МопТвоюЯтей" по поводу PHP-шных и MySQL-льных особенностей,
каковые очень хорошо охарактеризовали качество выше указанных продуктов
для меня - первохода.
Не рекомендую никому. И сам (по своему желанию) не возьмусь.
Кстати, об передаче аргументов в команду запуска никак не из книжки,
а как раз из "МопТвоюЯтей".
Ежели насоветуете мне что почитать толковое, буду очень рад и за сове подумаю спасибо.
8 янв 19, 12:09    [21779819]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4620
Pupkin,

http://php.net/manual/ru/function.proc-open.php
8 янв 19, 18:44    [21780046]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Pupkin
Member

Откуда:
Сообщений: 94
В конце команды добавь &
В комментариях на каком-та форуме (уж не помню где) прочитал совет, что нужно направить вывод в "никуда".
Для этого к строке команды нужно добавить такое: " > /dev/null &".
Не понимая что делаю, тупо добавил и оно заработало. Асинхронно!

Теперь запуск выглядит так:

shell_exeс($cmd." > /dev/null &");

что такое $cmd - см. выше.
13 янв 19, 14:30    [21784005]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4620
Pupkin,

вот вы как думаете, хорошо использовать в кросс-платформенном языке читы средства зависимые от платформы?
14 янв 19, 08:49    [21784474]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13505
kealon(Ruslan)
Pupkin,

вот вы как думаете, хорошо использовать в кросс-платформенном языке читы средства зависимые от платформы?


Кросс-платформенность языка не предполагает того, что на нем будут писать кросс-платформенные продукты.
14 янв 19, 10:33    [21784530]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13505
Точнее сказать "не обязывает".
14 янв 19, 10:33    [21784531]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4620
Hett
Точнее сказать "не обязывает".
если есть поддерживаемая либа, то писать напрямую это дурной тон
14 янв 19, 10:54    [21784545]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13505
kealon(Ruslan)
Hett
Точнее сказать "не обязывает".
если есть поддерживаемая либа, то писать напрямую это дурной тон

Согласен, но платформо-зависимость тут не причем.
14 янв 19, 11:11    [21784555]     Ответить | Цитировать Сообщить модератору
 Re: Асинхронный запуск скрипта из другого скрипта  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4620
Hett,

ну да, частный случай плохого применения
14 янв 19, 20:37    [21785175]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить