用于php的Crontab

时间:2013-12-14 14:21:10

标签: php

我解释我的问题。 我创建了一个名为newsletter.php的文件,其中包含以下代码:

$mytime = $db->fetchOne("SELECT CURTIME()"); //$db is a connection with config.php

$dataattuale  = time();
$b_dataatuale = date('G', $dataattuale);

echo($mytime);

if (($mytime > "12:49:00") && ($mytime < "12:51:00")) { // funzione orario

    // This query is used to extract email the Admin.
    $thread_qry10 = "SELECT * FROM user WHERE user_id = '1' LIMIT 1";

    $row10 = XenForo_Application::get('db')->fetchAll($thread_qry10);

    foreach ($row10 AS $rows10) {
        $mailemail = $rows10['email'];
    }

    //This query is used to extract emails from those who have chosen to receive

    $thread_qry11 = "
        SELECT email
        FROM user AS u JOIN user_field_value AS uf ON u.user_id = uf.user_id
        WHERE
            uf.field_value  = '1'
            AND uf.field_id = 'xDNewsletter'
    ";

    $row11 = XenForo_Application::get('db')->fetchAll($thread_qry11);

    foreach ($row11 AS $rows11) {
        $mailuseremail .= $rows11['email'] . ',';
    }

    $urlRefresh = 'http://' . $_SERVER['HTTP_HOST'] . '/' . $UrlActive . 'index.php?pages/Digest/';

    //Open file log for write
    $log = fopen("../" . $UrlActive . "xenDigest/crontab.txt", "w") or die ("Impossible create the file.");
    // write the current date on the log file
    $scrivi = fwrite($log, "43 13 * * * /usr/bin/lynx " . $urlRefresh);
    #close the file
    fclose($log);
}

正如您之前所看到的,在我以txt格式编写名为crontab.txt的文件后,检查服务器的当前时间是否多于或少于我选择的时间。

但这一切都行不通。我想知道为什么?

写入txt文件是写的,我试过写的是:

//链接到页面

43 13 * * * /usr/bin/lynx http://demo.netkingz.it/xenforo/index.php?pages/Digest/

是写:

//链接到文件.php

 43 13 * * * /usr/bin/lynx http://demo.netkingz.it/xenforo/library/xD/Listener/xDDay.php

但不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:0)

这是在您的用户crontab或/ etc / crontab中的服务器crontab吗? 如果是服务器,则需要像这样指定用户:

43 13 * * * root /usr/bin/lynx http://demo.netkingz.it/xenforo/library/xD/Listener/xDDay.php

答案 1 :(得分:0)

我提交了这个问题。 我正在使用一个论坛系统,这意味着外部mod的开发与附加文件将包含在“库”中,并为每个mod创建包含代码的特定文件夹。 我的代码的目的是发送电子邮件,然后发送新闻通讯系统。 我将下面的代码发布在名为DigestDay.php的php文件中,并且在路径库/ Digest / Listener / DigestDay.php中,即使现在我宣布文件权限是755,这里是php代码:

<?php

class Digest_Listener_DigestDay {

公共静态函数includeMyDigestDay($ hookName,&amp; $ contents,array $ hookParams,XenForo_Template_Abstract $ template)     {

  if($hookName == 'xDDay') {


        ob_start();

$ db = XenForo_Application :: getDb();

                    if ( !$db ) {


                        die( 'This script did not connect to the database' . mysql_error() );
                    }

                        $mytime = $db->fetchOne("SELECT CURTIME()");        

                    $dataattuale=time();
                    $b_dataatuale=date('G', $dataattuale);


                echo($mytime);

                    if($mytime > "01:00:00"){ // funzione orario




                        $thread_qry10 = "SELECT * FROM xf_user WHERE user_id = '1' LIMIT 1";

                                $row10 = XenForo_Application::get('db')->fetchAll($thread_qry10);

                                foreach ( $row10 AS $rows10 ) {
                                    $mailemail = $rows10['email'];


                                }



                                $thread_qry11 = "SELECT email FROM xf_user AS u JOIN xf_user_field_value AS uf ON u.user_id = uf.user_id WHERE uf.field_value = '1' AND uf.field_id = 'xDNewsletter'";

                                $row11 = XenForo_Application::get('db')->fetchAll($thread_qry11);

                                foreach ( $row11 AS $rows11 ) {
                                    $mailuseremail .= $rows11['email'].',';


                                }


                                                $urlMail = $_SERVER['HTTP_HOST'];

                                                // costruiamo alcune intestazioni generali
                                                $header = 'From: '.$mailemail;
                                                //$header .= "CC: Altro Ricevente <altroricevente@dominio.net>\n";
                                                $header .= "X-Mailer: ".$mailemail."\n";
                                                $headers = "BBC: ".$mailuseremail;

                                                // costruiamo le intestazioni specifiche per il formato HTML
                                                $header .= "MIME-Version: 1.0\n";
                                                $header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
                                                $header .= "Content-Transfer-Encoding: 7bit\n\n";
                                                 $messaggio = "Prova invio messaggio";

                                                $subject = 'Newsletter from '.$urlMail ;

                                                    if( @mail($headers, $subject, $messaggio, $header) ) echo "";
                    else echo "";

                    }

                $urlRefresh = 'php /home/USER_NAME/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php' ;


            # apertura in scrittura di un file di log
            $log = fopen("../".$UrlActive."Digest/crontab.txt","w") or die ("Impossible create the file.");
            # scrittura della data corrente sul file di log      
            $scrivi = fwrite($log,"33 01 * * * ".$urlRefresh);  
            #chiusura del file      
            fclose($log);        

            }

            $contents .= ob_get_contents();
            ob_end_clean();
        }




}

}

&GT;

此代码的功能或应该是: 1 - 从数据库中删除当前时间

 $mytime = $db->fetchOne("SELECT CURTIME()");

2 - 检查当前时间是否大于1:00

if($mytime > "01:00:00"){ // funzione orario

3 - 如果必须从db中选择的电子邮件中向他发送电子邮件(当然是时事通讯)

在这段代码之后,你应该再次重写文件cron job,这要归功于这段代码:

$urlRefresh = 'php /home/USER_NAME/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php' ;


            # apertura in scrittura di un file di log
            $log = fopen("../".$UrlActive."Digest/crontab.txt","w") or die ("Impossible create the file.");
            # scrittura della data corrente sul file di log      
            $scrivi = fwrite($log,"33 01 * * * ".$urlRefresh);  
            #chiusura del file      
            fclose($log);

我们了解问题的本质。 我正在开发mod的系统提供了一个从回调函数中获取的可视化部分,事实上,如果我访问包含上述代码的页面,我可以通过访问权限发送我的输入,显然可以正确发送新闻稿,但我做了不希望或我的未来客户每次都要去那个页面以确保发送新闻通讯,使用cron作业。 通过CPanel在托管Netsons上使用的cron作业代码如下:

37  01  *   *   *   php /home/NOME_DI_ACCESSO_UTENTE/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php

上面这段代码我已经被Netsons指示同样并且实际上做了检查代码似乎工作,或者更好地说CPanel的响应告诉我对上面的php文件的调用到达它很顺利但是显然不是发送通讯。我在CPanel的电子邮件回复中得到的回答是:内容类型:text / html。

然后我尝试了这段代码:

37   01 *   *   *   php -f -q /home/NOME_DI_ACCESSO_UTENTE/public_html/demo/xenforo/library/Digest/Listener/DigestDay.php

此代码总是在手上,但是,有时候我会一直在等待指示时间的到来,以及6小时后(当时早上7点与1点和37点相比)然而,事实是,在几天之后,我们已经停止了。 他给我的答案是CPanel:没有指定输入文件。

我还尝试更改所有*( * *)的星号,但除了来自CPanel的回复之外,我还没有收到时事通讯的电子邮件,但是如果我直接去页面改为离开,所以这让我认为这不是一个问题代码,而是调用你的代码。

我还尝试在上面发布的所有php代码中插入#/ usr / bin / php,但没有。

对于Netsons,你给我的代码是有效的,但对我来说不会调用该文件,因为文件代码(如果有人访问包含代码的页面)会发送新闻稿。

我希望我已经解释了一切,我希望有人可以帮助我。 很抱歉,如果我必须打开另一个应用程序segnalarmelo就像我现在这样做。 谢谢。

相关问题