Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761

Доменный скрипт (нужно запустить параллельно несколько скриптов)

01.06.2016, 17:10. Показов 3770. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла задача запустить на сервере несколько php скриптов параллельно. Все они должны работать одновременно. Запихнуть каждый скрипт в крон идея плохая, так как этих скриптов может быть очень много.
Нужен один скрипт, который будет запускать в работу остальные. Но, как я ни стараюсь, скрипты выполняются по очереди, а должны одновременно.
Вот мой главный файл, который запускается кроном так:
Bash
1
php domain.php > /dev/null 2>&1
PHP
1
2
3
4
<?php
exec('php script1.php > /dev/null 2>&1');
exec('php script2.php > /dev/null 2>&1');
?>
Но увы, script2.php выполняется только после того, как завершит работу script1.php. Хотя в документации написано, что скрипты должны исполнятся параллельно. Вот выдержка из документации:
Note:
If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.
-------
Примечание:
Если вы собираетесь использовать эту функцию в программе, работающей в качестве демона, убедитесь, что стандартный вывод функции направлен в файл или другой поток, в противном случае PHP зависнет вплоть до конца выполнения программы.
Вроде как условие соблюдено. Весь вывод направлен или в > /dev/null 2>&1, или в файл. К слову скрипты script1.php и script2.php пишут логи в файл script1.log и script2.log
Вот, к примеру script1.php:
PHP
1
2
3
4
5
6
7
8
9
<?php
require_once "/lib/Z_Log.php";
 
$log = new Z_Log('script1.log');
for ($i=0; $i<1000; $i++) {
    $log->info("Row $i was written");
    sleep(1);
}
?>
script2.php такой же самый, за исключением того, что логи пишутся в файл script2.log
Так вот, script2.log начинает заполнятся только после того, как полностью отработал script1.php. По заполнению логов я вижу, что скрипты запускаются по очереди, а не одновременно.
В чем проблема? Как запустить их параллельно с одного файла php?

Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2016, 17:10
Ответы с готовыми решениями:

Запустить несколько скриптов на одной странице
Неделю назад открыл для себя HTML/CSS. Сейчас пишу сайт на HTML. Хочу добавить слайдер и меню. Скачал готовые слайдер и меню. Оба написаны...

Запустить несколько скриптов из одного sql файла
Мне надо собирать базу в visual studio. Неудобно, когда все пакеты в одном файле. Как их растащить по файлам, чтобы запускалось все из...

Как можно в базе Firebird запустить несколько скриптов последовательно?
Времени суток доброго. Вопрос такой, как можно в базе запустить несколько скриптов последовательно? ну то есть скажем 3 insert в разные...

2
 Аватар для sash23
563 / 410 / 259
Регистрация: 31.05.2016
Сообщений: 1,105
01.06.2016, 20:49
А если так?
PHP
1
2
exec('php script1.php > /dev/null 2>&1 &');
exec('php script2.php > /dev/null 2>&1 &');
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.06.2016, 14:31  [ТС]
sash23, отлично! Работает! Спасибо! Все дело в одном символе
На Юниксе все без проблем, и это хорошо. На винде (что ожидаемо) скрипты все-равно исполняются по очереди. Не подскажешь вариант для винды?
На винде запускается так:
PHP
1
2
exec('php script1.php > nul 2>&1 &');
exec('php script2.php > nul 2>&1 &');
В винде нету пути /dev/null, здесь вместо него используется просто nul.
Разработка проекта у меня идет на домашнем компьютере с виндой, не хочу отлаживать на живом сервере

Добавлено через 5 часов 59 минут
Нашел решение для винды!
Нужно делать так:
PHP
1
2
3
$com = new Com('WScript.shell');
$com->run('php script1.php', 10, false);
$com->run('php script2.php', 10, false);
После версии php 5.4.5 программа будет выкидывать ошибку, что не обнаружен класс Com. Начиная с этой версии php по умолчанию не активирована библиотека php_com_dotnet.dll, хотя она по прежнему входит в php (не знаю во все ли версии). по-этому просто добавте следующую строку в файл php.ini:
Code
1
extension=php_com_dotnet.dll
Не забудьте перезагрузить веб сервер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.06.2016, 14:31
Помогаю со студенческими работами здесь

Нужно сделать несколько скриптов
Среди введенных с клавиатуры целых чисел (использовать SET /P) найти наибольшее и наименьшее. Признак конца ввода – знак -.В заданном...

При нажатии на кнопку нужно запустить скрипт php
создал с помощью генератора кнопки - Кнопку) &lt;style&gt; .button{text-decoration:none; text-align:center; ...

Нужно несколько раз запустить один .bat файл с разными параметрами.
Прошу помочь советом. Мне надо из VB appl (Windows NT)несколько раз запустить один и тотже .bat файл, но каждый раз c разными параметрами....

Нужно JSON разбить на несколько POST массивов и отправить в нужный скрипт
success: function(data){ var obj = jQuery.parseJSON(data); ...

Нужно что бы несколько строк введенных в таблице, .pl скрипт записал в файл .txt
Люди!!! Помогите написать скрипт. Нужно что бы несколько строк введенных в таблице, .pl скрипт записал в файл .txt, причем что бы при...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru