运行没有cron作业的更新任务

时间:2010-07-08 19:41:02

标签: php cron

我无法访问cron作业,因为我在共享服务器上。我仍然希望以设定的间隔在我的数据库上运行更新任务。我怎样才能做到最好。显然,我可以检查执行index.php的时间,如果是,那么我可以包含我的更新脚本。但是那时脚本没有执行的风险(没有用户在那一秒请求页面)或许多执行。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您确定无法访问cron吗?

crontab -e

你可能......

编辑: 另外,请不要每小时以较差的用户费用将更新脚本附加到index.php ...

答案 1 :(得分:0)

在具有cron的服务器上运行脚本以访问在一小时内运行php脚本的URL。我在我的crontab中使用wget来做那种事情。

答案 2 :(得分:0)

你是那里的一部分。不要检查时间是否“按小时”;检查当前时间与上次更新时间之间的差异。当然,这需要您在运行更新时在某处存储时间戳。

此方法的最大问题是在更新完成之前页面不会加载。根据更新的时间长短,这可能不是一个因素;但如果是,你可能想为更新生成一个新线程(我甚至不确定这是否可以在PHP中使用)。

答案 3 :(得分:0)

你们很亲密。不是将周期性函数放在用户请求的页面的实际PHP中,而是从用户的页面发出javascript请求。这样,您可以确定页面加载不会减慢,并且javascript将触发onLoad()。保持存储的“上次处理”值,如上所述,并且只在给定的时间间隔内运行一次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>