выполните задачу обновления без задания крона

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

Какие-либо идеи?

1
задан Pablo 8 July 2010 в 19:41
поделиться

4 ответа

Вы уверены, что у вас нет доступа к cron?

crontab -e

Вы просто можете ...

Изменить: Также, пожалуйста, не прикрепляйте скрипт обновления к index.php за счет одного бедного пользователя каждый час ...

2
ответ дан 2 September 2019 в 23:12
поделиться

Запустите скрипт на сервере, где есть cron, чтобы получить доступ к url, который запускает php-скрипт по часам. Я использую wget в своем crontab для таких вещей.

0
ответ дан 2 September 2019 в 23:12
поделиться

Вы часть пути туда. Не проверяйте, находится ли время «на часе»; проверьте разницу между текущим временем и временем последнего обновления. Это, конечно, требует, чтобы вы хранили метку времени где-то при запуске обновления.

Самая большая проблема с этим подходом заключается в том, что страница не загружается до завершения обновления. В зависимости от того, сколько времени занимает обновление, это может не быть фактором; но если это так,возможно, вы захотите создать новый поток для обновления (я даже не уверен, возможно ли это в PHP).

0
ответ дан 2 September 2019 в 23:12
поделиться

Ребята, вы близки. Вместо того, чтобы помещать периодические функции в PHP страницы, которую запрашивает пользователь, сделайте так, чтобы запрос javascript происходил со страницы пользователя. Таким образом, вы можете быть уверены, что загрузка страницы не замедлится, и javascript сработает onLoad(). Сохраняйте значение 'last processed', как было предложено выше, и запускайте функцию cron только один раз за заданный интервал времени.

Вот JS, который нужно использовать, чтобы вызвать что-то удаленно. Конечно, это будет работать только в современных браузерах с включенным JS...

<script>
        function DoCron()
        {
            var xhr; 
            try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
            catch (e) 
            {
                try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
                catch (e2) 
                {
                  try {  xhr = new XMLHttpRequest();     }
                  catch (e3) {  xhr = false;   }
                }
             }

            xhr.onreadystatechange  = function()
            { 
                 if(xhr.readyState  == 4)
                 {
                      if(xhr.status  == 200) 
                      {
                            alert("Cron Worked");
                      }
                      else 
                      {
                         return 'ERROR';
                      }
                 }
            };  

            xhr.open("POST", "CRON.php", true); 
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
            xhr.send('');
        }

    </script>
0
ответ дан 2 September 2019 в 23:12
поделиться
Другие вопросы по тегам:

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