使用PHP设置一个cron作业并永远重新访问

时间:2016-10-20 05:58:06

标签: php crontab

我在服务器上有一个文件,它从页面中提取一些数据,比如爬虫。好的,现在,有时,脚本的执行需要5秒,但有时甚至需要1分钟或2秒。

设置一个用于在2,3或5分钟访问文件的cron作业对我来说不舒服,因为我需要这个爬虫尽可能快地运行。

所以我的问题是:

我可以设置一个cron作业来运行,比方说,每5分钟一次,然后设置php再次重复运行脚本吗?

更清楚:

render :pdf => "#{@employee_full_name}-#{@template_name} Letter",
       :template => "/company/employee/download_employee.pdf.erb",
       :margin => {
             :top => 30,
             :bottom => 30
       },
       :header => {
           :html => {
               :template => '/company/employee/common_header.pdf.erb',
               :locals => {
                   header: @template_header
               }
           }
       },
       :footer => {
           :html => {
               :template => '/company/employee/common_footer.pdf.erb',
               :locals => {
                   footer: @template_footer
               }
           }
       },
       :disposition => "attachment"

的index.php?cron的

*/5 * * * * wget -O - site.com/index.php?cron >/dev/null 2>&1

由于我不太了解cron job如何对我的脚本做出反应,我不知道当另外5分钟cron作业再次访问url时会发生什么。

我将处于无限循环中?

你会怎么做?我需要一些建议。我真的需要设置cron作业运行得更快,在我看来,php中的函数必须永远被调用。

2 个答案:

答案 0 :(得分:0)

可能你可以使用crontab更快地运行它,但你可以有一个pid-lock(排序),这样每次调用crontab时,只能运行一个脚本。

答案 1 :(得分:0)

设置cronjob:

* * * * * php /path/to/your/file.php --arg1=value1 --arg2=value2 >> /dev/null 2>&1

你的file.php

<?php

//test your args
var_dump($argv);

$minute = date('i',time());

//run every 10 minutes
if(intval($minute)%10==0){
    //run your cron job code here
    cron_action();
}
else{
    //do other code
}

function cron_action()
{
    //do stub
}

这就是如何将cronjob与laravel https://laravel.com/docs/5.3/scheduling一起使用,你将从中学习。