Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите навести порядок в некотором агрегаторе... [2]
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Цитата:
Ну вот и все. Найден обход лимитов по памяти на хостинге ))
Это был сарказм?
Я же привел примеры того, как проверял это. Ну да, конечно у меня не хостинг, у меня VPS. Но все равно, честно говоря я не пойму как это работает, потому что register_shutdown_function() можно объявить где угодно, и скрипт может вылететь до этого объявления. Может интерпретатор проходит весь сценарий и выявляет все места где может регистрироваться функция завершения и перед выполнением всего сценария выделяет оперативку для этой функции?
В общем, я не знаю как это работает, но вроде оно работает. Погоняем, понаблюдаем, по-тестируем.. (Добавление)
Уф, вот собственно говоря что у меня таки получилось (script_runner.php):
(Добавление)
А а вот собственно говоря и лог работы этого ранера:
Цитата:
2014-12-11 11:52:22 - INFO --> The end work of script runner with script: get_feeds
2014-12-11 11:53:01 - INFO --> Start runner.
2014-12-11 11:53:01 - INFO --> Register scripts: get_feeds, aggregate,
2014-12-11 11:53:01 - INFO --> Last execution script: get_feeds
2014-12-11 11:53:01 - INFO --> Current execution script: aggregate
2014-12-11 11:53:01 - INFO --> No running scripts. Run aggregate...
2014-12-11 11:53:01 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/aggregate.php"
2014-12-11 11:54:01 - INFO --> Start runner.
2014-12-11 11:54:01 - INFO --> Register scripts: get_feeds, aggregate,
2014-12-11 11:54:01 - INFO --> Last execution script: get_feeds
2014-12-11 11:54:01 - INFO --> Current execution script: aggregate
2014-12-11 11:54:01 - ERROR --> Script aggregate is alrady runnig. Die.
2014-12-11 11:54:01 - INFO --> The end work of script runner with script: aggregate
2014-12-11 11:54:40 - INFO --> The end work of script runner with script: aggregate
2014-12-11 11:55:01 - INFO --> Start runner.
2014-12-11 11:55:01 - INFO --> Register scripts: get_feeds, aggregate,
2014-12-11 11:55:01 - INFO --> Last execution script: aggregate
2014-12-11 11:55:01 - INFO --> Current execution script: get_feeds
2014-12-11 11:55:01 - INFO --> No running scripts. Run get_feeds...
2014-12-11 11:55:01 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/get_feeds.php"
2014-12-11 11:55:25 - INFO --> The end work of script runner with script: get_feeds
2014-12-11 11:56:01 - INFO --> Start runner.
2014-12-11 11:56:01 - INFO --> Register scripts: get_feeds, aggregate,
2014-12-11 11:56:01 - INFO --> Last execution script: get_feeds
2014-12-11 11:56:01 - INFO --> Current execution script: aggregate
2014-12-11 11:56:01 - INFO --> No running scripts. Run aggregate...
2014-12-11 11:56:01 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/aggregate.php"
2014-12-11 11:57:01 - INFO --> Start runner.
2014-12-11 11:57:01 - INFO --> Register scripts: get_feeds, aggregate,
2014-12-11 11:57:01 - INFO --> Last execution script: get_feeds
2014-12-11 11:57:01 - INFO --> Current execution script: aggregate
2014-12-11 11:57:01 - ERROR --> Script aggregate is alrady runnig. Die.
2014-12-11 11:57:01 - INFO --> The end work of script runner with script: aggregate
Как видите, скрипты запускаются в строгой последовательности и никогда не запускается 2 одинаковых скрипта или 2 скрипта одновременно. (Добавление)
Конечно здесь есть непонятные мне моменты, но вроде как все работает правильно. Буду добавлять еще скрипты в управляющий раннер и смотреть что будет получаться.
DeepVarvar
Отправлено: 11 Декабря, 2014 - 11:15:56
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012
Помог: 1 раз(а)
Что бы знать, какой должен быть запущен следующий скрипт. Мне нужно выполнять несколько скриптов в строгой последовательности, и только после того, как предыдущий был завершен, запускать следующий. И не в коем случае не параллельно. Именно поэтому мне сразу и не подошел сервер очередей, хотя esterio, как то сумел взять управление очередью в свои руки и то, только для того, что бы не ставить в очередь скрипт, который там уже стоит или выполняется. Но так и я смог, а вот именно с порядком выполнения так и не получилось совладать.
За join спасибо, век живи век учись
DeepVarvar
Отправлено: 11 Декабря, 2014 - 13:42:38
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Очередь удобно хранить в JSON, есть встроенные ф-ции, которые кстати еще и быстрее чем стандартный пыховый сериалайз, и легко дописать/удалить элемент очереди из стека. Ато я чот не уловил - скриптов много разных, а пишешь ты почему-то в один файл одно имя только.
И выполнятся они должны в той последовательности, в которой они зареганы.
Цитата:
2014-12-12 9:14:27 - INFO --> The end work of script runner with script: get_feeds.
2014-12-12 9:15:01 - INFO --> Start runner.
2014-12-12 9:15:01 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:15:01 - INFO --> Last execution script: get_feeds
2014-12-12 9:15:01 - INFO --> Current execution script: aggregate
2014-12-12 9:15:01 - INFO --> No running scripts. Run aggregate...
2014-12-12 9:15:01 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/aggregate.php"
2014-12-12 9:16:01 - INFO --> Start runner.
2014-12-12 9:16:01 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:16:01 - INFO --> Last execution script: get_feeds
2014-12-12 9:16:01 - INFO --> Current execution script: aggregate
2014-12-12 9:16:01 - WARN --> Script aggregate is alrady runnig. Die.
2014-12-12 9:16:01 - WARN --> The end work of script runner because aggregate is already running.
2014-12-12 9:17:00 - INFO --> The end work of script runner with script: aggregate.
2014-12-12 9:17:00 - INFO --> Start runner.
2014-12-12 9:17:00 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:17:00 - INFO --> Last execution script: aggregate
2014-12-12 9:17:00 - INFO --> Current execution script: make_ready_events
2014-12-12 9:17:00 - INFO --> No running scripts. Run make_ready_events...
2014-12-12 9:17:00 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/make_ready_events.php"
2014-12-12 9:17:04 - INFO --> The end work of script runner with script: make_ready_events.
2014-12-12 9:18:01 - INFO --> Start runner.
2014-12-12 9:18:01 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:18:01 - INFO --> Last execution script: make_ready_events
2014-12-12 9:18:01 - INFO --> Current execution script: get_feeds
2014-12-12 9:18:01 - INFO --> No running scripts. Run get_feeds...
2014-12-12 9:18:01 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/get_feeds.php"
2014-12-12 9:18:26 - INFO --> The end work of script runner with script: get_feeds.
2014-12-12 9:19:02 - INFO --> Start runner.
2014-12-12 9:19:02 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:19:02 - INFO --> Last execution script: get_feeds
2014-12-12 9:19:02 - INFO --> Current execution script: aggregate
2014-12-12 9:19:02 - INFO --> No running scripts. Run aggregate...
2014-12-12 9:19:02 - INFO --> Exec: "/usr/bin/php /home/user/www/project_name/cron/aggregate.php"
2014-12-12 9:20:02 - INFO --> Start runner.
2014-12-12 9:20:02 - INFO --> Register scripts: get_feeds, aggregate, make_ready_events
2014-12-12 9:20:02 - INFO --> Last execution script: get_feeds
2014-12-12 9:20:02 - INFO --> Current execution script: aggregate
2014-12-12 9:20:02 - WARN --> Script aggregate is alrady runnig. Die.
2014-12-12 9:20:02 - WARN --> The end work of script runner because aggregate is already running.
Как видите, я по крону каждую минуту запускаю этот скрипт-ранер и он автоматом определяет, какой скрипт должен быть запущен, на основе того, какой скрипт запускался до этого, имя которого и пишется в файл. У меня не такая уж и большая последовательность (в ходе ведения этой темы я её слегка сократил с 5 до 3 скриптов), и потом, мне нужно знать только 1, какой скрипт был завершен последний раз, а на основании этого я уже знаю, какой скрипт необходимо запустить следующим.
Пока вроде все работает как надо. Если кому нужна новая версия этого скрипт-ранера, то вот исходник:
(Добавление)
В Вашем случае, кроме этого, надо ещё где-то текущий этап сохранять (Добавление)
Ой, не заметил, что тему можно закрыть уже. Ну да ладно. Раз уж написал-пусть будет. (Добавление)
Плюс этого способа в том, что даже при аварийном вылете скрипта в любом месте всё работает как надо.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.