首页 文章

Cron-job没有发送正确的日期

提问于
浏览
1

当(管理员)用户设置日期时,我有一个cronjob得到更新 . 正确设置了cronjob,因为它在cronjob列表中显示如下(在cPanel上):

lynx -source http://www.example.com/dynam_code/autoscripts/expenseClaims.php?do=notify&date=1350252000&final=1350338400

这是cronjob创建脚本:

$output = shell_exec('crontab -l');
$jobs = explode(PHP_EOL,$output);
$minute = '00';
$hour = '09';
$day = date('j',strtotime($_GET['reminder']));
$month = date('n',strtotime($_GET['reminder']));

for($i = 0; $i < count($jobs); $i++) {
    if(strpos($jobs[$i],'http://intra.vceza.com/dynam_code/autoscripts/expenseClaims.php?do=notify') !== false)
        $jobs[$i] = $minute.' '.$hour.' '.$day.' '.$month.' * lynx -source http://intra.vceza.com/dynam_code/autoscripts/expenseClaims.php?do=notify&date='.strtotime($_GET['done']).'&final='.strtotime($_GET['approved']);
    }
    foreach($jobs as $key => $value) { 
        if($value == "") { 
            unset($jobs[$key]); 
        } 
    } 
    $jobs = array_values($jobs); 

    $jobs[] = "";
    $output = implode(PHP_EOL,$jobs);
    file_put_contents('/tmp/crontab.txt', $output);
    exec('crontab /tmp/crontab.txt',$output,$return);

此cronjob会触发一个邮件脚本,该脚本会根据这些日期向整个公司发送邮件 . 当脚本自动运行时,它会显示所有日期为1970年1月1日 . 但是,当我从cron作业复制路径到该PHP文件并运行它时,它会发出正确的日期 .

这是抓取日期并发送邮件的脚本:

if($_GET['do'] == 'notify') {
    $time = $_GET['date'];
    $day = date('l',$time);
    $date = date('j F Y',$time);
    $final = date('j F Y',$_GET['final']);
    $to = 'people@example.com';
    $str = "Expense Claims";

    $html_data = '<html><head><title>'.$str.'</title></head><body style="font-family:Calibri, Arial; font-size:15px">Good day all,

Please take note that all Expense Claim should be completed on the intraweb by ' . $day . ' morning <b>' . $date . ' before 9am.</b>

All supervisors should approve claims by Friday morning <b>' . $final . ' before 9am.</b>

All slips and supporting documents should be handed in by Friday morning <b>' . $final . ' before 9am</b>. Bear in mind that it is the sole responsibility of the claimee to hand in his/her slips or supporting documents.

<span style="color:red">Please take note that Expense Claims will only reach the Finance Department if <b>submitted and approved on time.</b> Claims not submitted or approved on time will only be processed in the following month.</span>

Kind regards,
JD</body></html>'; $mime = new MIME_mail("John Doe <jd@example.com>", $to, $str); $mime->fattach($path,"",OCTET,BASE64,ATTACH); $mime->attach($html_data,$str, HTML, BASE64); $mime->send_mail(); }

我不知道问题是什么,我试过查看代码 . 就像我说的,如果我手动运行它就可以了 . 如果cronjob运行它,它不会 .

1 回答

  • 1

    在do = notify之后,您的crontab条目包含'&' . 如果在cron作业(或者* nix shell)中的命令中使用'&',则意味着&之前的部分将在后台执行 . 因此,只执行'lynx -source http://www.example.com/dynam_code/autoscripts/expenseClaims.php?do=notify'部分 . 你需要引用url,所以命令看起来像这样:

    lynx -source 'http://www.example.com/dynam_code/autoscripts/expenseClaims.php?do=notify&date=1350252000&final=1350338400'
    

相关问题