создание задания расписания без задания Cron

Запланированная задача должна быть создана, но ее невозможно использовать для работы с Cron (есть предупреждение от хостинг-провайдера, что «выполнение задания cron более одного раза в течение 45-минутного периода является нарушением их правил и может привести к отключению Счет."

PHP-скрипт (который вставляет данные из txt в базу данных mysql) должен выполняться каждую минуту, то есть эту ссылку следует называть http://www.myserver.com/ImportCumulusFile.php?type=dayfile&key=letmein&table=Dayfile&file=./data/ Jan10log.txt

Есть ли другой путь?

Solutions Collecting From Web of "создание задания расписания без задания Cron"

Существует несколько способов выполнения повторяющихся заданий. Некоторые из способов, о которых я могу думать сразу:

  1. Использование: https://www.setcronjob.com/

Используйте внешний сайт, подобный этому, чтобы отключить ваш URL с установленными интервалами

  1. Использование метаобновления. Больше здесь . Вам нужно будет открыть страницу и оставить ее в рабочем состоянии.

  2. Обновление Javascript / Ajax. Как и в предыдущем примере.

  3. Настройка задания cron. Большинство общедоступных хостинга предоставляют способ создания рабочих заданий cron. Посмотрите на cPanel вашего хостинга.

если у вас есть доступ к оболочке, вы можете выполнить скрипт php через оболочку

что-то вроде этого будет бесконечным циклом, который сгорит 60 секунд, собирает мусор и повторяется до конца времени.

while(true) { sleep(60); //script here //end your script } 

или вы можете сделать «бедный mans cron» с ajax или meta refresh. Я сделал это раньше. в основном, вы просто размещаете перенаправление с мета-обновлением javascript или html в начале вашего скрипта. получить доступ к этому скрипту из вашего браузера и просто оставить его открытым. он будет обновляться каждые 60 секунд, как крона.

еще одной альтернативой cronjob, будет сценарий bash, такой как:

 #!/bin/bash while : do sleep 60 wget http://127.0.0.1/path/to/cronjob.php -O Temp --delete-after done 

все это сказано, вы, вероятно, поймаете хозяин и все равно закончите.

Итак, ваше лучшее решение:

пойдите и подпишитесь на 5-10 долларов в месяц на vps и попрощайтесь с общедоступным хостингом и приветствуйте свой собственный маленький сервер.

если вы это сделаете, вы даже можете прекратить использовать crappy php и использовать hhvm facebook вместо этого и наслаждаться его потрясающей производительностью.

Я понимаю, что этот вопрос немного устарел, но я наткнулся на него неделю назад с этим вопросом, и лучшим и безопасным вариантом, который мы нашли, было использование веб-службы.

Наш контекст:

У нас есть наша система как на общем хостинге, так и на частных облаках.

Нам нужно, чтобы скрипт активировался один раз в месяц (есть планы создать больше расписаний и разрешить пользователям создавать некоторые предопределенные действия)

Наша система обеспечивает доступ ко многим клиентам, поэтому, когда кто-либо использует систему, она вызывает веб-службу через Ajax и не заботится об ответе (ведь все регистрируется в нашей базе данных и должно выполняться без взаимодействия с пользователем)

Мы сделали так:

1 – вызов ajax называется доступом на любом основном экране.

2 – Веб-служба считывает таблицу расписания в нашей базе данных и вызывает любые вызовы, требующие вызова

3 – Чтобы избежать множества вызовов со стопкой веб-сервисов, мы проверяем дату и время с интервалом в 10 минут, прежде чем выполнять какие-либо действия

Это также способ распределения баланса нагрузки, а графики не влияют на систему с взаимодействием с пользователем.

Есть бесплатный сервис по

http://cron-job.org

Это позволяет вам создать небольшую альтернативу.

Вариант A

Простым способом реализовать это было бы создание записи файла / базы данных, содержащей время выполнения вашего php-скрипта:

 <?php // crons.php return [ 'executebackup.php' => 1507979485, 'sendnewsletter.php' => 1507999485 ]; ?> 

И при каждом запросе, сделанном через ваших посетителей, вы проверяете текущее время, и если в его версии вы включаете свой php-скрипт:

 <?php // cronpixel.php $crons = @include 'cache/crons.php'; foreach ($crons as $script => $time) { if ($time < time()) { // create lock to avoid race conditions $lock = 'cache/' . md5($script) . '.lock'; if (file_exists($lock) || !mkdir($lock)) { continue; } // start your php script include($script); // now update crons.php $crons[ $script ] += 86400; // tomorrow file_put_contents('cache/crons.php', '<?php return ' . var_export($crons, true) . '; ?' . '>') // finally delete lock rmdir($lock); } } header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); // image data $im = imagecreate(1, 1); $blk = imagecolorallocate($im, 0, 0, 0); imagecolortransparent($im, $blk); // image output header("Content-type: image/gif"); imagegif($im); // free memory imagedestroy($im); ?> 

Примечание. Это будет вызвано на второй раз, потому что вы не знаете, когда ваш посетитель откроет вашу страницу (возможно, через 2 секунды). Поэтому имеет смысл установить новое время на следующий день, не добавляя 86400 секунд. Вместо этого используйте mktime .

Вариант B

Это небольшой проект, который я реализовал в прошлом, который похож на идею @ r3wt, но охватывает условия гонки и работает в точном времени, например, cronjob будет делать в планировщике без удара max_execution_time . И он работает большую часть времени без необходимости воскрешать его (как это делается через посетителей в Варианте A).

Объяснение: Сценарий записывает файл блокировки (чтобы избежать условий гонки) на 15, 30, 45 и 60 секунд секунды:

 // cron monitoring foreach ($allowed_crons as $cron_second) { $cron_filename = 'cache/' . $cron_second . '_crnsec_lock'; // start missing cron requests if (!file_exists($cron_filename)) { cron_request($cron_second); } // restart interrupted cron requests else if (filemtime($cron_filename) + 90 < time()) { rmdir($cron_filename); cron_request($cron_second); } } 

Каждый раз, когда файл блокировки отсутствует, скрипт создает его и использует sleep () для достижения точной секунды:

 if (file_exists($cron_filename) || !mkdir($cron_filename)) { return; } // add one minute if necessary $date = new DateTime(); $cron_date = new DateTime(); $cron_date->setTime($cron_date->format('H'), $cron_date->format('i'), $sec); $diff = $date->diff($cron_date); if ($diff->invert && $diff->s > 0) { $cron_date->setTime($cron_date->format('H'), $cron_date->format('i') + 1, $sec); } $diff = $date->diff($cron_date); // we use sleep() as time_sleep_until() starts one second to early (https://bugs.php.net/bug.php?id=69044) sleep($diff->s); 

После пробуждения снова он отправляет запрос через fopen () :

 // note: filter_input returns the unchanged SERVER var (http://php.net/manual/de/function.filter-input.php#99124) // note: filter_var is unsecure (http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/) $url = 'http' . isSecure() . '://' . filter_input(INPUT_SERVER, 'HTTP_HOST', FILTER_SANITIZE_URL) . htmlspecialchars($request_uri, ENT_QUOTES, 'UTF-8'); $context = stream_context_create(array( 'http' => array( 'timeout' => 1.0 ) )); // note: return "failed to open stream: HTTP request failed!" because timeout < time_sleep_until if ($fp = @fopen($url, 'r', false, $context)) { fclose($fp); } rmdir($cron_filename); 

Тем самым он называет себя бесконечно, и вы можете определить разные времена начала:

 if (isset($_GET['cron_second'])) { if ($cron_second === 0 && !(date('i') % 15)) { mycron('every 15 minutes'); } if ($cron_second === 0 && !(date('i') % 60)) { mycron('every hour'); } } 

Примечание. Он производит 5760 запросов в день (4 в минуту). Не много, но cronjob использует гораздо меньше ресурсов. Если ваш max_execution_time достаточно высок, вы можете изменить его на вызов себя только один раз в минуту (1440 запросов / день).