Comments 43
А каждую минуту (точнее выставить минимальное время вызова) выполнять скрипт кроном и смотреть прошло нужное время или нет. Т.е. скрипт запускается переодически, но это не значит, что нужное действие будет выполнено.
Крона нет. Изначально поставлено так, что крон нельзя использовать. Вообще, признаюсь, может сейчас есть другие решения, в частности, в php6 (вообще не знаком с изменениями), т.к. я делал это в декабре 10 года.
//зануда_mode=ON: PHP6 не существует и в ближайшее время не будет. Есть PHP 5.3 и разрабатывается PHP 5.4 (уже вроде как в beta)
Каюсь. Но я уточнил, что про 6 я только слышал, не вникал вообще.
Кстати, про пхп6 прочитал впервые в книге Мэтта Зандстра «PHP объекты, шаблоны и методики программирования». Не ожидал что там недостоверная информация. Сейчас ради интереса открыл книгу полистал и убедился — в начале книги пишут что пхп6 «находится на пути к нам», а далее в одном из примечаний указано, что в обеих версия пхп5 и пхп6 допустимо импользование var вместо public.
Видимо поэтому я и думал что пхп6 уже есть.
Видимо поэтому я и думал что пхп6 уже есть.
Ни о чем. Из разряда «как я реализовал вполне обычную задачу»
> вот от чего я не смог оторваться — браузер все же придется открыть, чтобы изначально запустить скрипт
Ну и двойка за исполнение. Что вам не дало просто запустить скрипт, который просто будет выполняться постоянно?
nohup /path/to/php /path/to/script.php
> Теперь надо заставить скрипт работать, не обращая внимания на максимальное время выполнения, установленное сервером
для скриптов, запущенных вручную из консоли этого ограничения нет.
> Озадачили меня тут написать демона на PHP
Статья могла бы быть крутой, если бы вы действительно описали то, как писать демона на PHP с использованием php.net/manual/en/book.pcntl.php и php.net/manual/en/book.posix.php (это то, о чем я подумал после прочтения поставновки задачи)
> вот от чего я не смог оторваться — браузер все же придется открыть, чтобы изначально запустить скрипт
Ну и двойка за исполнение. Что вам не дало просто запустить скрипт, который просто будет выполняться постоянно?
nohup /path/to/php /path/to/script.php
> Теперь надо заставить скрипт работать, не обращая внимания на максимальное время выполнения, установленное сервером
для скриптов, запущенных вручную из консоли этого ограничения нет.
> Озадачили меня тут написать демона на PHP
Статья могла бы быть крутой, если бы вы действительно описали то, как писать демона на PHP с использованием php.net/manual/en/book.pcntl.php и php.net/manual/en/book.posix.php (это то, о чем я подумал после прочтения поставновки задачи)
Консоли пхп хостинг не давал, о консоли я тогда тоже думал.
Ссылки открыл, почитаю на досуге, спасибо.
Ссылки открыл, почитаю на досуге, спасибо.
Оговорюсь, я понятия не имею какой был хостинг, делал у себя, исходя из того, что говорил заказчик.
т.е сейчас даже ssh не дают на хостинге? У вас там какой год?
Ну я же дописал специально «оговорюсь....»
Я делал ни сайт, ни модуль. Просто человек сказал надо сделать вот это, вот так и вот так.
Я сделал, для меня показалось необычно, я отписал.
Я делал ни сайт, ни модуль. Просто человек сказал надо сделать вот это, вот так и вот так.
Я сделал, для меня показалось необычно, я отписал.
я никогда и никому ssh не даю. ибо нефиг.
например, agava.ru для шаред хостинга не предоставляет ssh доступ. сам с этим столкнулся. причем это ответ саппорта.
Интересный сарказм. Когда придумали SSH, у нас еще кругом пользовались фидонетом. А понятием хостинга оперировали только избранные. Но, даже тогда уже были rlogin, telnet и rsh.
Бугагашенька.
Бугагашенька.
<?php
$demon_script = dirname(__FILE__).'/demon.php';
passthru("nohup /usr/bin/php $deamon_script > /dev/null &");
?>
В demon.php делаем проверку не запущен ли другой экземляр скрипта.
После прочтения вступления сложилось впечатление что заказчик нищеброд не может себе позволить хостинг поэтому будет довольствоваться бесплатными без крона. Да и еще программиста напрягает на всю ночную, надеюсь не за 2 копейки?
Думаю, проблема не в том, что не хватает денег на хостинг с кроном, ибо можно воспользоваться каким-нибудь сторонним бесплатным «кроном онлайн», коих развелось множество. Когда-то очень давно сам пользовался ни раз.
Кроется здесь что-то более загадочное…
Кроется здесь что-то более загадочное…
Возможно, это бесплатный хостинг, который предоставляет провайдер, который подключает к интеренту.
Например, что заказчик без понятия, что такое крон или ssh?)
> вот от чего я не смог оторваться — браузер все же придется открыть, чтобы изначально запустить скрипт
да ладно запустить, а как его остановить предусмотрено?
да ладно запустить, а как его остановить предусмотрено?
А мне понравилось. Комментирующие как-то чересчур прагматичны. При этом машина для заваривания чая всем пришлась по душе. :)
Автору респект, ему поставили задачу с условиями, и он её выполнил, научившись всему необходимому для этого. В то время, как многие ответили бы заказчику что-нибудь вроде: «купите нормальный хостинг», и даже были бы правы. ))
Автору респект, ему поставили задачу с условиями, и он её выполнил, научившись всему необходимому для этого. В то время, как многие ответили бы заказчику что-нибудь вроде: «купите нормальный хостинг», и даже были бы правы. ))
Я согласен, — был несколько резок — несколько лет назад я наверное что-нибудь подобное и сделал и от такого счастья, наверно, захотелось бы поделиться тем, что я поборол такую задачу. В общем, автор действительно молодец, что справился с посталенной задачей — на таких задачах скилл как раз и набивается. Думаю, в ответах на этот топик Dep3kuu найдет много информации к размышлению на тему того, как запустить PHP процесс-демон.
Вообще, конечно, нужно знать то, где будет запускаться тот софт, который пишешь, — это я бы требовал от заказчика в первую очередь. А как работать без SSH я уже забыл и вспоминать не хочу.
Вообще, конечно, нужно знать то, где будет запускаться тот софт, который пишешь, — это я бы требовал от заказчика в первую очередь. А как работать без SSH я уже забыл и вспоминать не хочу.
А доступа к system() тоже нет? А то можно было бы тупо один раз запуститься, сделать работу и в конце сделать что-нибудь в духе
Я бы по крайней мере в эту сторону начал думать в первую очередь.
system("at $run_self_sh_command $some_new_random_time")
— запланировать запуск самого себя в какое-то определенное время.Я бы по крайней мере в эту сторону начал думать в первую очередь.
я тоже думал в эту сторону, но это отсеялось. Вернее, я сначала сделал все через passthru, и довольно быстро, но в ответ пришло что нельзя использовать подобное (exec, system в этом контексте считаются подобными).
Я не знаю для чего это надо было. Но, судя по оплате результата, на хороший хостинг (я бы сказал даже сервер) деньги были.
Да и человек явно или сам знающий, или отдавал код кому-то на проверку.
Я не знаю для чего это надо было. Но, судя по оплате результата, на хороший хостинг (я бы сказал даже сервер) деньги были.
Да и человек явно или сам знающий, или отдавал код кому-то на проверку.
> И не используйте globals, это очень плохо.
Почему?
Почему?
отличный там кстати комментарий habrahabr.ru/blogs/php/132299/#comment_4391649
если код решил конкретную задачу чем он плох то?
если код решил конкретную задачу чем он плох то?
global $time_sec, $time_to_start; — дальше не читал.
ну остается только возрадоваться, что по ходу был доступ по FTP, да и на интернет или другое средство связи с исполнителем у заказчика были средства.
Ну а так: работает и хорошо, задача выполнена, хотя да, проверок я бы добавил.
Ну а так: работает и хорошо, задача выполнена, хотя да, проверок я бы добавил.
Автора видимо ни чуть не смущает, что если в одну из итераций запуска «демона» он умрет, то перезапустить его будет некому. Хранение данных в сессии тоже не есть хорошо. Сессии они такие, имеют свойство умирать, особенно когда все находится в одном месте, в /tmp, и админ любит «оптимизировать» нагрузку на фс принудительными зачистками этой директории. И на хостинге где нет даже крона шанс встретить такого «специалиста» очень высок.
Критику я всю выслушал, определенную часть знаний почерпнул, определенная у меня уже была (во-первых, скрипт писался год назад, во вторых, делался он в соответствии с определенными требованиями и ограничениями, ну и основной функционал вообще убран, в том числе, кнопка остановки работы скрипта).
Собственно, в статье целью было не скрипт/программу/продукт/модуль или еще что-то предоставить, а идею. Это не какой-то готовый класс для работы, а пример реализации логики.
Да, задача поставлена необычно, реализовывать пришлось с извращениями + мои ошибки, но может быть кому-то еще пригодится это.
За сим, не понимаю некоторой критики к статье. Однако, учту, ибо статья была первая. Теперь буду знать.
Собственно, в статье целью было не скрипт/программу/продукт/модуль или еще что-то предоставить, а идею. Это не какой-то готовый класс для работы, а пример реализации логики.
Да, задача поставлена необычно, реализовывать пришлось с извращениями + мои ошибки, но может быть кому-то еще пригодится это.
За сим, не понимаю некоторой критики к статье. Однако, учту, ибо статья была первая. Теперь буду знать.
О, госсподи, что ж за кривизна?
Берёте любой html/ajax эмулятор терминала (тот же ajaxterm), запускаете с /bin/bash (/bin/sh и т.д.), подключаетесь, дальше: nohup application &. Если повезло и есть screen, то ещё проще.
Берёте любой html/ajax эмулятор терминала (тот же ajaxterm), запускаете с /bin/bash (/bin/sh и т.д.), подключаетесь, дальше: nohup application &. Если повезло и есть screen, то ещё проще.
Спорный вопрос, потому как и аякс и терминал отбросил заказчик.
Однако может аякс он отбросил в том что я хотел сделать, а терминал таким образом можт и можно было запустить, честно, не думал.
Однако может аякс он отбросил в том что я хотел сделать, а терминал таким образом можт и можно было запустить, честно, не думал.
Кстати… это, возможно, виндовый сервер.: )
Sign up to leave a comment.
Фоновое выполнение скрипта на PHP без crontab