| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
можно поподробнее: - какая СУБД - характеристики сервера - сколько юзеров - каков размер траффика и какой канал |