Да, google был просмотрел. Возможно плохо, но всё таки: есть файлик sync.php, есть mysql, Нет доступа к crontab и серверу в принципе.
как бы создать аналог cron на чистом php (мб + mysql) без использования утилит linux?
Условия: самый тухлый шаред-хостинг, с отсутствием возможности подключения модулей веб-сервера, да и вообще без доступа к нему, нет функционала "расписания" в интерфейсе. Есть phpMyAdmin.
(Да, понятно, что лучше хостинг поменять). Но, допустим.
Есть мысль, что например, заставить выполняться скрипт с удаленного сервера (где есть доступ ко всему), скажем каким-нить POST/GET и т.п. Но это не интересно. Хотелось бы подумать над решением чистого PHP/MYSQL
xmoonlight, Хз, что бы было )).
Одного хватит, сам себя будет дёргать, это вообще бесконечно. Ещё раз, так не делать, это шутка!
Это я вспомнил как я проги писал для Windows, типа не убиваемый процесс.
Там как раз нужно было 2 отдельных процесса, а потом у друга в мониторе ползала муха )))
Режим "Эстафета":
1. Запускаем PHP-скрипт (наш "cron" на PHP),
2. Проверяем задачи в БД (и исполняем если нужно),
3. Ждём сколько-то (sleep),
4. Запрашиваем сами себя через GET (GOTO 1).
5. Сразу же (после GET) завершаем работу текущего.
Команды управления нашим PHP-кроном отдаём через БД с помощью другого PHP-скрипта именно управления через базу данных.
Sinot, сессия никак не связана с работой/неработой скрипта!
И ей в скрипте крона - вообще не место!
Запуск - да, через браузер и как только скрипт сам завершит работу и браузер выведет чистый лист, то крон можно считать запущенным (ну или предусмотреть какой-то вывод, если запуск был из браузера).
xmoonlight, то, что нет доступа через ssh для пользователя - вовсе не значит, что нет доступа к функциям, типа shell_exec, или еще каким. Безусловно, если функции для работы с консолью из php анально огорожены - ваш вариант остается чуть ли не единственным, хотя это и костыль.
index0h, Согласен полностью!
Но закрыть юзершелл с кроном, и не закрыть shell_exec (и подобные) +
Условия: самый тухлый шаред-хостинг, с отсутствием возможности подключения модулей веб-сервера, да и вообще без доступа к нему, нет функционала "расписания" в интерфейсе. Есть phpMyAdmin.
xmoonlight, да мне то понятно. Я бы просто написал бы пример какого-нибудь кода для тех, кому это могло бы потом помочь) Серьезно, до сих пор это частая проблема как оказалось...
Подскажите пожалуйста (мне действительно интересно), как скрипт завершит работу, если он будет ждать ответ от другого скрипта, который будет ждать ответ от другого скрипта... По вашей схеме мы получаем рекурсивное выполнение скрипта с задержкой между вызовами.
Могу предположить, что на сервере будет запускаться куча процессов и потихоньку по таймауту завершаться. Но это же жуть. Так и по шапке от хостера получить можно.
Можете представить примитивный пример без SQL, возможности прервать его выполнение и прочим. То есть просто бесконечно вызывающий сам себя скрипт с задержкой, скажем с каким-нибудь выводом в файл метки времени?
UPD: Вероятно мне больше интересно как НЕ ждать ответа после GET запроса.
xmoonlight, меня почему-то смущает история с задачами в mysql.. А ещё больше - то, что, например, кто-то ребутнет сервак, или service apache2 restart..
Lust, так зачем допускать, можно обсуждать вполне реальную ситуацию, ничего в этом зазорного нет. Может хостинг тебе нормальный порекомендуем, это же лучше, чем выдумывать несуществующие ситуации
Ну... я нахожу странным в принципе использование такого хостинга для не статических сайтов. Самый жлобский хостинг, без вот этой тупой хрени стоит 0.88eur в месяц, это чуть больше буханки украинского хлеба.
Ок, файлик в своем каталоге через php хоть можно создать? Функция ignore_user_abort отключена? Апач рубит процесс жестко рубит процесс по истечении ttl, или можно таки задать set_time_limit(0) ?
edward_freedom, см. сам вопрос. Это неуместно в обсуждении. Условия даны. Соответственно думаем в рамках того, что дано)
Понятно, про другие хостинг, вебхуки и т.п. Это даже обсуждать смысла нет.
edward_freedom, да, но всё равно придётся использовать что-то, что могло бы его запустить в случае завершения процесса. От mail($to,$zhopa,'все сломалось'); до сторонних сервисов.
не можем мы лезть в настройки php.ini и прочих модулей. Хостингом запрещено усё)
Решение вашей проблемы - забить на такого хостера. Если заказчик жлобится на цену, что я вам привел и настаивает, что бы вы занимались кудесничеством - ну хз, я бы с ним не работал на вашем месте.
xmoonlight Я кажется понял, в чем суть вопроса: есть какое-то количество хостеров с вот такими стремными ограничениями, но бесплатных и могущих в паразитную нагрузку на целевые системы. Управление этой нагрузкой - через задачи из мускуля, или еще как-то будут передаваться, нужен был только способ запуска. По крайней мере более осмысленной причиной пользоваться чем-то подобным я не вижу (ну кроме чистой статики).
Lust, когда не хочется на личном ПК с локальным сервом городить зоопарк служб/тулз, а нужна синхронизация данных в бд при запуске с удалённого серва и с дальнейшими оповещениями, то такая штука - вполне подходит.
Очень дурацкий вариант, но вроде так и делали раньше.
При каждом n-ом запросе главной страницы запускать sync.php с проверкой времени. Или при каждом запросе главной страницы проверять время и запускать sync.php соответственно. Главное, чтобы посещения были в нужный промежуток времени запуска скрипта.
Barmunk, поэтому bitrix как и wp давно пора забыть)) я принципиально стараюсь не работать с этими CMS в виду вот этих вот спорных решений и устаревшей кодовой базы.