Сценарии расписания, не используя КРОНА

Я знаю, что существует много сообщений об использовании КРОНА для выполнения php файла. Но, в мире общего хостинга и простоте установки для пользователя, я не хочу должным быть смешивать с этим.

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

Мысли?

//Open socket connection to cron.php
$socketcon = fsockopen($_SERVER['HTTP_HOST'],80,$errorno,$errorstr,10);
if($socketcon) {
$socketdata = "GET /cron.php HTTP 1.1\r\nHost: ".$_SERVER['HTTP_HOST']."\r\nConnection: Close\r\n\r\n";
fwrite($socketcon,$socketdata);
//Normally you would get all the data back with fgets and wait until $socketcon reaches feof.
//In this case, we just do this:
fclose($socketcon);
} else {
//something went wrong. Put your error handler here.
}

cron.php:

//This script does all the work.
sleep(200);
//To prove that this works we will create an empty file here, after the sleep is done.
//Make sure that the webserver can write in the directory you're testing this file in.
$handle = fopen('test.txt','w');
fclose($handle);

Найденный сценарием от сообщения в блоге: http://syn.ac/tech/13/creating-php-cronjobs-without-cron-and-php-cli/

15
задан Nic Hubbard 28 July 2012 в 16:26
поделиться

5 ответов

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

Я бы все равно использовал работу Крона, даже если это немного больно.

4
ответ дан 1 December 2019 в 04:47
поделиться

Если я хорошо понимаю, вы запускаете первый скрипт с удаленного компьютера, что сделав удар во втором сценарии, который будет размещен на хосте Cron-Invabled? Затем, благодаря ошибке или странной черту взаимодействия PHP / Weberver, когда вы немедленно закрываете соединение, сценарий не будет времени на время время ожидания?

Первая часть довольно распространена, есть даже компании, предоставляющие эту самую услугу ( http://www.webcron.org/index.php?lang=English[ Например, автоматически будет ткать любой сценарий, который вы хотите примерно в любое время, когда вы спрашиваете его, за плату).

Вторая часть мне неизвестна. Это похоже на ошибку в взаимодействии PHP / Webserver для меня, но я мог бы ошибаться. Во всяком случае, я бы дважды проверил, это ошибка или нет (подожди, вот что вы делаете прямо сейчас?) И если это окажется законным поведением, то пойти на это. Если это кажется ошибкой, то не полагайтесь на это, так как это может быть в любое время в любое время.

0
ответ дан 1 December 2019 в 04:47
поделиться

Работа с cron, по сути, это работа с cron. вы ее настраиваете, и операционная система запускает работу за вас. Я не уверен, как работает PHP-скрипт, который вы получили с сайта, но если он требует человеческого вмешательства, то на самом деле он не называется заданием cron. Если вы не хотите использовать cron, вы можете использовать цикл, а затем использовать функции даты в PHP для установки даты и времени. Pseudocode

while (1) {
    $d=date("d");
    if ( $d == "01" ){
        //run every 1st of month
        //code to run here
    }
}
4
ответ дан 1 December 2019 в 04:47
поделиться

Насколько я понял из прочтения этого сообщения в блоге и просмотра кода, это не совсем способ обойтись без доступа к cron, это способ избежать того, чтобы кто-то ждал, пока сервер ответит на длинный запрос. Если вам абсолютно необходимо, чтобы определенный скрипт выполнялся, скажем, каждые 10 минут или около того, то вам нужно будет использовать cron . Если вы просто хотите избежать того, чтобы пользователи ждали завершения длинного запроса, то этот способ взлома может сработать. Даже при использовании этого метода, я все равно думаю, что вы столкнетесь с временными ограничениями, если ваш скрипт будет выполняться дольше, чем позволяет PHP.

Просматривая wp-cron.php(упомянутый в ссылке на блог), создается впечатление, что он полностью полагается на пользователей, посещающих сайт, для запуска проверок по набору заданий с временными метками.

Эти методы не будут очень надежными, если только у вас не будет другого сервера, который будет пинговать через определенные интервалы времени. Основной целью этой методики является избежание того, чтобы пользователь ждал, скажем, 15 секунд для выполнения скриптов очистки или обслуживания время от времени, а не настоящая замена для всех применений cron.

1
ответ дан 1 December 2019 в 04:47
поделиться

Это функциональное, но странное решение, которое гарантирует, что вам нужно, чтобы ваша машина подключена весь день, выполняющий первый скрипт. Если вы хотите, я бы порекомендовал вам использовать сценарий оболочки, используя WGET или CURL для этой цели.

Например:

#!/bin/sh

curl -O http://www.myserver.com/cron.php 2>&1 > /var/log/remote.cron.log

Но я думаю, что решение, которое вы будете любить реализовать, если вам не нужно запускать очень синскризованно, является чеком в конце вашего index.php, чтобы увидеть, когда он провел скрипт в последний раз, если Это было более двух часов назад, то включают ('cron.php') . Вы также можете хранить временную метку при запуске сценария в экологической переменной, чтобы избежать штрафа производительности.

1
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: