首页 文章

如何使用PHP创建cron作业?

提问于
浏览
81

我是新手使用cron工作 . 我甚至不知道如何写它 . 我试图从互联网上搜索,但我仍然不太了解它 . 我想创建一个每分钟执行我的代码的cron作业 . 我正在使用PHP来创建它 . 它不起作用 .

Example

run.php (将每分钟执行的代码)

<?php

echo "This code will run every minute";

?>

cron.php

<?php

$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");

?>

假设这两个文件在同一个文件夹中 .

代码是我做错了吗?如果错了,请告诉我如何解决它 .

9 回答

  • 0

    与尝试运行cron.php的方式相同,您可以运行另一个PHP脚本 . 但是,您必须通过CLI界面执行此操作 .

    #!/usr/bin/env php
    <?php
    # This file would be say, '/usr/local/bin/run.php'
    // code
    echo "this was run from CRON";
    

    然后,在crontab中添加一个条目:

    * * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null
    

    如果run.php脚本具有可执行权限,则可以直接在crontab中列出,也可以不使用/ usr / bin / php部分 . 脚本中的'env php'部分将找到实际运行PHP代码的相应程序 . 因此,对于“可执行”版本,请向该文件添加可执行权限:

    chmod +x /usr/local/bin/run.php
    

    然后,将以下条目添加到crontab:

    * * * * * /usr/local/bin/run.php &> /dev/null
    
  • 10

    像这样创建一个cronjob来处理每一分钟

    *       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
    
  • 0

    为什么你不使用卷曲?从逻辑上讲,如果你执行php文件,你将在你的浏览器上通过url执行 . 如果你运行卷曲它很简单

    while(true)
    {
        sleep(60); // sleep for 60 sec = 1 minute
    
        $s = curl_init();
        curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); 
        curl_exec($s); 
        curl_getinfo($s,CURLINFO_HTTP_CODE); 
        curl_close($s);
    }
    
  • 1

    在linux / ubuntu终端中键入以下内容

    crontab -e
    

    选择一个编辑器(有时候它会要求编辑器)并且每分钟运行一次

    *       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
    
  • 1

    这是迄今为止我发现的PHP代码的最佳解释:

    http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

    简而言之:

    虽然安排新工作的语法乍一看似乎令人生畏,但实际上,一旦你将其分解,它实际上相对简单易懂 . 一个cron作业将始终有五列,每列代表按时间顺序排列的“运算符”,后跟完整路径和执行命令:

            • home / path / to / command / the_command.sh

    每个时间顺序列与任务的时间表具有特定的相关性 . 它们如下:

    Minutes represents the minutes of a given hour, 0-59 respectively.
    Hours represents the hours of a given day, 0-23 respectively.
    Days represents the days of a given month, 1-31 respectively.
    Months represents the months of a given year, 1-12 respectively.
    Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively.
    

    enter image description here

    因此,例如,如果一个人想在每个月的第一天安排一个任务,那么它看起来像这样:

    0 0 1 * * home / path / to / command / the_command.sh

    如果我们想安排一个任务在每个星期六上午8:30运行,我们会按如下方式编写:

    30 8 * * 6 home / path / to / command / the_command.sh

    还有许多运营商可用于进一步定制日程安排:

    Commas is used to create a comma separated list of values for any of the cron columns.
    Dashes is used to specify a range of values.
    Asterisksis used to specify 'all' or 'every' value
    

    请访问完整文章的链接,它解释说:

    • 如果要手动输入/编辑cronjob,格式是什么?

    • 如何使用PHP和SSH2库作为用户进行身份验证,您将要编辑哪个crontab .

    • 完整的PHP类,包含用于身份验证,编辑和删除crontab条目的所有必要方法 .

  • 0
    function _cron_exe($schedules) {
            if ($obj->get_option('cronenabledisable') == "yes") {
                // $interval = 1*20;
                $interval = $obj->get_option('cronhowtime');
                if ($obj->get_option('crontiming') == 'minutes') {
                    $interval = $interval * 60;
                } else if ($obj->get_option('crontiming') == 'hours') {
                    $interval = $interval * 3600;
                } else if ($obj->get_option('crontiming') == 'days') {
                    $interval = $interval * 86400;
                }
                $schedules['hourlys'] = array(
                    'interval' => $interval,
                    'display' => 'cronjob'
                );
                return $schedules;
            }
    
    }
    
  • 1

    有一种简单的方法可以解决这个问题:你可以每隔1分钟由cron执行一次php文件,并在php可执行文件里面生成“if”语句,当时间“现在”这样执行时

    <?/** suppose we have 1 hour and 1 minute inteval 01:01 */
    
    $interval_source = "01:01";
    $time_now = strtotime( "now" ) / 60;
    $interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2);
    
    
    if( $time_now % $interval == 0){
    /** do cronjob */
    }
    
  • 51

    添加到Alister,您可以通过在服务器上的ssh会话中输入crontab -e来编辑crontab(通常不是这种情况) .

    星星代表(*表示每个单位):

    [Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]
    

    你可以阅读更多关于this here的内容 .

  • 28
    $command = "php ".CRON_PATH.php ";
    if(substr(php_uname(), 0, 7) == "Windows"){
    pclose(popen("start /B ". $command, "r"));
    }else{
    shell_exec($command ." > /dev/null &");
    }
    

相关问题