Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Долгоиграющий скрипт. CRON-запуск каждую минуту. |
Автор: Wowa 10.12.2005, 12:35 |
Есть сложный скрипт, который должен обрабатывать некоторые данные. Время обработки данных будет обычно всегда по несколько минут длиться. Скрипт будет запускаться через CRON каждую минуту или же раз в 5 минут. Вопрос: Лучше писать этот скрипт на PHP или Perl? PHP ведь накладывает ограничение на время исполнения скрипта в 30 сек. Ясно, что это значение через php.ini можно изменить, но ведь всего сервера.... Впрочем, мне не нужно мой скрипт выполнять через веб-сервер. А устроит прямой запуск. Как его через Крон запускать? Так? php /etc/script.php В этом случае не будет ограничения на время выполнения? |
Автор: -=Ustas=- 10.12.2005, 13:36 | ||||||
Ну зачем же?! ![]()
Теперь смотри, время обработки - несколько минут, периодичность запуска - каждую минуту. Таким макаром сервак у тебя загнется через n-ое количество времени. ![]() |
Автор: Wowa 10.12.2005, 13:41 | ||
не загнется, т.к. далеко не всегда время обработки - несколько минут. |
Автор: AntonioBanderaz 10.12.2005, 14:29 |
Можно и не только так сделать,всё это дело мона в бесконечный цикл засунуть... Но тогда переодичность упадёт. Только в начале срипта поставь set_time_limit(0); А лучше всего использовать нативную прогу, которую ты будешь запускать через system или exec, строишь демон на PHP. |
Автор: AkimVital 10.12.2005, 22:22 |
По своему опыту скажу: похожие программы на ПХП жрут 98% Memory и дохрена эфирного времени процессора, в результате чего апач рискует в конце концов cдохнуть и перезапуститься (скрипт рискует неотработать полностью - для некоторых систем это критично) и это затягивается надолго. Если PHP - модуль CGI, результаты не столь плачевны. В то время как Perl предназначен для таких целей, быстрее выполняется и (по моей практике) не потребляет больше 5-10% Memory. Апач от него тоже вряд ли сдохнет =) Если Запускается кроном - однозначно не ПХП ибо крон выполняет команды(!) а пхп вызывается апачем (исключение опять же CGI-PHP) для этого в начале файла надо как и перлу прописать #!/usr/bin/php И естесно сделать его исполняемым... |
Автор: Mal Hack 10.12.2005, 22:27 | ||
Нет. (100% не дам, но где-то проскальзывало). Демона лучше вобще писать на Си. ПХП для этого, мягко говоря, не годиться. Перл - получше, но тоже не сильно удачно, по сравнению с сями. |
Автор: AkimVital 10.12.2005, 22:28 | ||||
![]()
Это вообще смешно... |
Автор: Wowa 10.12.2005, 22:28 | ||
дык, а разве нельзя дать команду: php myscript.php ? Разве не будет работать также, как perl myscript.pl ? |
Автор: AkimVital 10.12.2005, 22:30 | ||
можно, только ключ нужен, по-моему -r Добавлено @ 22:33 php -h Usage: php [options] [-f] <file> [args...] php [options] -r <code> [args...] php [options] [-- args...] -a Run interactively -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -r <code> Run PHP <code> without using script tags <?..?> -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>. args... Arguments passed to script. Use -- args when first argument starts with - or script is read from stdin |
Автор: Wowa 10.12.2005, 22:44 | ||
раз можно, то какие проблемы? Даже с тем же демоном на пхп, построительство которого ты назвал смешным. Есть аргументы? |
Автор: Mal Hack 10.12.2005, 22:46 |
Wowa php как демон тяжелый получается. |
Автор: Wowa 10.12.2005, 22:47 | ||
за счет чего? |
Автор: Mal Hack 10.12.2005, 22:52 | ||
Не ориентирован ПХП на такие вещи. Да, может и на каких-то задачах это не будет заметно, но на других - да. |
Автор: Wowa 10.12.2005, 22:56 | ||
я плохо могу себе представить такую задачу, т.к. не вижу причин для тормозов скрипта. Пока мне их тут тоже никто не назвал.. |
Автор: AkimVital 10.12.2005, 22:57 | ||||
Есть: хотя бы если это демон, он должен иметь хоть какуб-то степень свободы (запуска, завершения) - ага... модуль апача как раз тот случай !!! А остальное уже было сказано... читай форум внимательно. Добавлено @ 22:58
наприм, то же взаимодействие с базой данных, происходит через сокеты. Сделай 100 000 инсертов на ПХП и на перле и ты увидишь разницу... |
Автор: Wowa 10.12.2005, 22:58 | ||||||
причем тут модуль апача? Это надо быть идиотом, чтобы запускать через КРОН пхп-скрипт через АПАЧЕ. Добавлено @ 22:59
А в perl разве иначе?
Каких инклудов? |
Автор: AkimVital 10.12.2005, 23:03 |
сори - опечатался - исправился - инсертов SQL. Идиотом не надо быть, что бы ставить ПХП как модуль Апач - таких в мире гдето 70% в перле сам перл иначе работает... учи перл.... или просто попробуй, как я сказал.... |
Автор: Wowa 10.12.2005, 23:09 | ||||
Естественно, т.к. это для другой нужды сделано. Мне никто не мешает иметь ПХП, как модуль апача для работы сайта и иметь простой PHP-интерпритатор для запуска всяких скриптов по обслуживанию сайта через крон. Добавлено @ 23:12
Ну такое лучше сразу через mysql BASE < base.sql |
Автор: AkimVital 10.12.2005, 23:14 | ||||
Я так понял это была тема дисскусии. Раз ты сам решил писать все на ПХП - вот и хорошо. Я все-го лишь пытался помочь. Скажу еще, что как-то я сделал подобный демон, который работал 1.5 часа (я по TOP'у смотрел) и грузил сервер так, что апач еле на запросы пользователей отвечал. Перл в той ситуации показал себя лучше. Добавлено @ 23:15
Не, ты ради интереса попробуй эту задачу решить и на ПХП и на перл. |
Автор: Wowa 10.12.2005, 23:18 | ||||
зависит от того, как написано... Если написано полностью одинаково на обоих язык,т.е. используются аналогичные функции и алгоритм на 100% совпадает, то нужно бы выявить за счет чего пхп-скрипт в этом случае работал хуже. Мне вот это как раз и интересно. А перл я итак знаю, несколько лет на нем программировал. Добавлено @ 23:22
Он у тебя через тебя mod_php работал? |
Автор: Mal Hack 11.12.2005, 00:38 | ||||
Обоснуй. Когда мы запускаем пхп скрипт из под крона, мы его можем запустить как shell скрипт, указав обработчик, т.е. интерпретатор, так же как в Perl'e #!usr/bin и т.п. Апач тут вообще никакого отношения не имеет.
Ну смотри. Вот два варианта, Си и ПХП. Так. Очевидно, что ПХП более медленный чем Си. Так? Очевидно, что к примеру с сокетами он будет работать медленнее, хотя бы потому что его код будет транслироваться на код сей (грубо сказал, понимаю). Си же сам понимаешь более отлаженный язык, более низкоуровневые, и с сокетами работать будет быстрее... Если конкретно задачу, то - чтение порта. |
Автор: AntonioBanderaz 11.12.2005, 16:15 | ||
Скорее потому что Си не скриптовый язык... PHP скрипт, компилится при каждом запуске скрипта, а Си один раз (конечно не всегда)... WowaА что за действия должен скрипт выполнять? |
Автор: Wowa 11.12.2005, 16:46 | ||||
шерстить базу, кое-что находить и изменяя снова записывать. Добавлено @ 16:48
Скорее или нет - это я и хочу выяснить. Если скрипт запускается раз в минуту, то мне совершенно все равно - скриптовый он или нет. Если было бы несколько вызовов в секунду, тогда это имело бы значение. А так.. |
Автор: Mal Hack 11.12.2005, 21:37 | ||
Тут выгоднее все-таки сделать демона на сях, чтобы он не каждые 60 секунд занова грузился, а всегда висел в RAM. |
Автор: Wowa 11.12.2005, 23:24 | ||
из-за скорости работы с сокетами??? Вроде и на перл тогда можно.., раз говорите, что пзп медленнее |
Автор: Alone 12.12.2005, 17:22 | ||
Возможно ты хотел сказать что будет медленнее обрабатывать данные, поступившие из сокета??? php ведь не бейсик-80, где каждая строка при выполнении транслировалась... В любом случае, я считаю это не критичным, потому что во многих случаях играет роль скорость разработки а не 2% выигрыш в скорости. Не на 286 сидим ведь... Очень разумно было сказано за выполнение скрипта как шелл-скрипта, с указанием в заголовке обработчика. Действительно апач тут вообще не учавствует, ДАЖЕ если пхп установлен как модуль(!). Правда это не сработает, если пхп установлен ТОЛЬКО как модуль(.so), и нет его бинаря в системе. А в общем, схема с использованием пхп как скриптового языка оправдывает себя на все 100%. (Mal Hack, не тебе ![]() Не будет хватать ресурсов - подымет вопрос снова, только уже в другом контексте. Так что Wowa, никого не слушай и делай как тебе нравится перл/пхп в общем дадут одинаковый результат. |
Автор: Mal Hack 12.12.2005, 17:44 | ||
Не забывай, что демон на си уже исполняемый файл, а пхп еще должен транслироваться. Хорошо если как демон будет работать, а если через крон каждый раз транслироваться не есть хорошо. |
Автор: Alone 12.12.2005, 18:43 |
![]() ![]() Я сам нередко использую пхп в качестве быстрого написания шелл-скриптов. ![]() |
Автор: mxp100 27.10.2006, 03:57 |
Из личного опыта Был скрипт запускаемый из крона каждый 1 час он выполнял перенос таблицы (закачанный каталог товаров, около 80 тыс. записей) в основную таблицу на PHP4 скрипт выполнялся около 1-1.5 часа (хотя объемы не колосальные), тот же самый скрипт написанный на Perl выполнялся 10-20 мин. выводы делайте сами ;) P.S. Хотя в основном использую PHP как более удобный язык |
Автор: -=Ustas=- 27.10.2006, 09:02 |
[offtop] mxp100, доброе утро!!! Почти год прошел с предыдущего поста ![]() [\offtop] |
Автор: IZ@TOP 27.10.2006, 12:53 |
G0rinich, поддерживаю. У меня была подобная по тяжеловестности задача, 5Mb XML, количество запросов к БД не мерил, но вероятнее всего возле 100К. Время выполнения в пределах одной-вух секунд. |
Автор: pythonwin 30.10.2006, 14:25 |
а почему не питон? ![]() |
Автор: kshyms 7.1.2008, 09:15 | ||
Wowa
Очень хорошая идея. Имеет практическую пользу и хорошие перспективы. IMHO. Если действительно PHP, который исполняется на сервере этим скриптом устанавливаются свойства C и без юзера любой скрипт с добавлением вашего демона будет самостоятельно запускаться. Это во первых экономия, а во вторых оптимизация и автоматизация. Обязательно применю его в своих исследованиях и буду докладывать о проблемах и успехах. |
Автор: kshyms 8.1.2008, 09:48 | ||
http://phpshki.com/2007/07/10/demon_na_php.html А может так лучше? Но пока оба скрипта и ваш и этот не работают. Что не так? |
Автор: kshyms 12.1.2008, 16:34 |
30 1 * * 1 /home/site/script.php мин час любой день любоого месяца еще такой cron оказывается есть Но самое главное оказывается у провайдера нужно спрашивать как его настраивать. То есть у всех по разному. Инфо к размышлению ![]() |
Автор: Resha 23.10.2008, 12:26 | ||
Вот это жесть ![]() ![]() ![]() ![]() Проблема с перегрузкой решается просто: Запускаете скрипт - записываете файл с именем - pid php-процесса - в папочку (processes, например). По крону остается только запускать скрипт, который будет удалять файлы несуществующих процессов и добавлять необходимое количество новых процессов. Лично у меня было два скрипта - dispatcher и script. Первый запускает скрипты и отслеживает наличие необходимого количетва процессов скрипта script, второй выполняет нужные нам действия и по завершению запускает новый процесс script. Система работает, как часы ![]() Удачи ![]() |
Автор: nerezus 22.11.2008, 17:44 | ||||||||
P.S. Эти ф-ии в пхп, кстати, написаны на C. Но к делу отношения это не имеет. |
Автор: w2w 7.12.2008, 21:36 | ||
Я работаю только в Linux, в качестве скриптового языка для простеньких вещей использую bash, для сложненьких - php, пока проблем с тормозами и прочими вещами не замечал. По ходу прочтения ветки заметил следующее: 1. Некоторые товарисчи не в курсе, что php можно использовать как cli инструмент. К примеру, можно сделать так:
Получим на выходе аналог функции phpinfo(), но для консоли. Отлично читаемый вывод, без хтмл тегов. Что характерно - никаких утечек памяти, никаких нагрузок на апач, более того, апача может и не быть вовсе. 2. Недоверие к php как быстрому скриптовому движку. Я довольно давно программирую на пхп, приходилось ковырять немерянное количество чужих исходных кодов и писать много своих. По личному опыту могу сказать, что большинство тормозов связано с кривым кодом. К сожалению, маркетинговый ход разработчиков php (я о том, что для программирования на php не нужно быть программистом ![]() 3. PHP разрабатывался только для WEB, поэтому для других целей не годится. Это уже из области мифов. Когда заходит об этом речь, я всегда вспоминаю древнейший миф о том, что sql запрос делающий выборку из нескольких таблиц, работает медленнее, чем из извлекающий данные из одной таблицы. Да пхп разрабатывался для веб, но это было много лун назад и воды с тех пор утекло никак не меньше, чем с тех времен когда на смену файловым БД пришли СУБД ![]() Удачи. |
Автор: pythonwin 8.12.2008, 15:17 | ||
можно поподробнее: - какая СУБД - характеристики сервера - сколько юзеров - каков размер траффика и какой канал |