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