Cron作业没有运行,但http://file.php从浏览器运行良好?

时间:2012-10-24 19:30:17

标签: php command-line cron

我在这里读过Stackoverflow,文件里面的路径可能是个问题,但它看起来第一件事似乎失败了...除此之外我不知道,即使在这里检查了很多问题/答案之后。在某些时候,我认为这是因为我使用了PHP标记的简写版本(“<? ?>”而不是“<?php ?>”。

所以基本上,当我在浏览器“http://site.com/file.php”中键入url时,它运行正常(这是一个mysql备份+通过电子邮件发送)。但是当我尝试使用cron运行相同的文件时,我会收到错误...

我的服务器在MediaTemple上,cron是:

php -c /home/xxxxxxx/domains/xxxxxxxxxxxxxx.com/html/777/fnc/filenamexxxxxx.php --'bckup=1'

这是错误:

  

PHP:语法错误,意外'('在第2行的/nfs/c08/h02/mnt/xxxxxxx/domains/xxxxxxxxxxxxxxx.com/html/777/fnc/filenamexxxxxx.php

这是代码的第一部分(因为没有编辑,网站地址+电子邮件除外):

<?php
// envoi un courriel de tous les rv des 7 prochains jours pour chaque clinique à toutes les 30min (cron script lancé par cpanel)

session_start();
$bypass = 1;
//$_SESSION['rep'] = "777/";

include_once("inc_includes_principaux.php");
//error_reporting(E_ERROR);

// to send an automated backup by email, just link to this file like this with CRON:
if ($_GET['bckup']){

// va chercher les infos de connection
include_once('inc_bd_connexion.php');


// get cliniques
    $cliniques = _get_clinique_info();//_p($cliniques);_x();
    $date = date('Ymd');
    $date7jours = _get_x_days_before($date, 7, '+');//_e($date7jours);_x();


// iterate cliniques and send email
foreach ($cliniques as $cliniqueid => $v) {

    $emailthis = _get_rv_printformat($date, $date7jours, $cliniqueid);// start, end, id

    // send email to users
    _email('emailaddressxxxxxxxx', $emailthis, 'LCJG - Horaire de '.$v['A29'].' du '._date_en_texte($date).' au '._date_en_texte($date7jours),'emailaddressxxxxxxxx');
    sleep(1);//give a break to the server and let some other tasks execute
    _email('emailaddressxxxxxxxx', $emailthis, 'LCJG - Horaire de '.$v['A29'].' du '._date_en_texte($date).' au '._date_en_texte($date7jours),'emailaddressxxxxxxxx');
    unset($emailthis);

    echo 'LCJG - Horaire de <b>'.$v['A29'].'</b> pour les 7 prochains jours envoyé par courriel.<br>';
}
}

?>`

3 个答案:

答案 0 :(得分:1)

你无法在cli环境中开始会话

所以要在两个添加

中运行它
if (!isset($argc)) {
    //Not  CLI
    session_start();
}

OR

if (PHP_SAPI === 'cli')
{
   // is cli
}

你的$ _GET也不会工作,值将在$ argv数组中。您需要了解一些脚本如何在CLI中运行以及通过Web服务器运行。

答案 1 :(得分:1)

为了避免更改我的代码,因为我想要一个易于实现的解决方案,我遵循Dagon建议使用wget,而是使用CURL。所以我可以完全保持我的代码,只需调用我的文件,以便在特定时间执行它。

无需更改我的脚本即可运行的代码是:

curl www.aaaaaaa.com/file-to-execute.php?arg=1

有了这个,cron跑得很好,现在一切都很好。谢谢大家的帮助!

答案 2 :(得分:0)

而不是-c你的意思是使用-f CLI参数吗?

$ php --help
-c <path>|<file> Look for php.ini file in this directory
-f <file>        Parse and execute <file>.

看起来php可能会尝试将您的脚本解析为INI文件,然后从STDIN查找您的脚本。 (否则,我不确定为什么php会忽略-c并继续执行你的PHP文件作为目标脚本。)