【问题标题】:How to set Codeigniter based url in Cron job?如何在 Cron 作业中设置基于 Codeigniter 的 url?
【发布时间】:2023-09-25 06:33:02
【问题描述】:

我正在为我的网站使用 Codeigniter。我必须使用 Cron 作业来运行其中一个控制器功能。 我在 Cron 作业中使用了所有这些选项,但都不起作用。

0 * * * * php /home/username/public_html/ /controller/method

0 * * * * php /home/username/public_html/ controller/method

0 * * * * php /home/username/public_html/ controller method

0 * * * * php /home/username/public_html/index.php /controller/method

0 * * * * php /home/username/public_html/index.php controller/method

0 * * * * php /home/username/public_html/index.php controller method
wget -O /dev/null https://websiteurl/url >/dev/null   {websiteurl = website url} {url = route url}

如果我将任何 PHP 文件放在主目录中,那么它工作正常。但不适用于 Codeigniter。

【问题讨论】:

    标签: php codeigniter cron


    【解决方案1】:

    可以在主目录下创建一个cron.php文件

    <?php
    $argc = $_SERVER['argc'];
    $argv = $_SERVER['argv'];
    
    // INTERPRETTING INPUT
    if ($argc > 1 && isset($argv[1])) {
        $_SERVER['PATH_INFO']   = $argv[1];
        $_SERVER['REQUEST_URI'] = $argv[1];
    } else {
        $_SERVER['PATH_INFO']   = '/crons/index';
        $_SERVER['REQUEST_URI'] = '/crons/index';
    }
    
    set_time_limit(0);
    
    require_once('index.php');
    ?>
    

    我在cron下面用过

    30 * * * * php /var/www/html/cron.php /controller/method
    

    为我工作

    【讨论】:

    • 感谢您的回答。我尝试了另一种方式。在主目录中创建了一个文件。并通过 curl 调用 Codeigniter 完整 URL,这对我有用
    • 但是如果你添加一个新的 crontab 来调用其他控制器,你是否也应该创建一个新文件?
    【解决方案2】:

    我尝试了不同的选项,但无法找出问题所在。但是下面的方法解决了我的问题。

    在主目录中创建了一个文件。在这个文件中,我使用 curl 调用 CodeIgniter URL。

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.website.com/call-desired-url');   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 900);
    $content = curl_exec($ch);  
    curl_close($ch); 
    

    【讨论】: