1
我有一个cronjob,当(管理)用户设置一个日期时得到更新。该的cronjob设置正确,因为它显示了这样的的cronjob列表(在的cPanel):Cron-job不发送正确的日期
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 = '[email protected]';
$str = "Expense Claims";
$html_data = '<html><head><title>'.$str.'</title></head><body style="font-family:Calibri, Arial; font-size:15px">Good day all,<br/><br/>Please take note that all Expense Claim should be completed on the intraweb by ' . $day . ' morning <b>' . $date . ' before 9am.</b><br/><br/>All supervisors should approve claims by Friday morning <b>' . $final . ' before 9am.</b> <br/><br/>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.<br/><br/><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><br /><br/>Kind regards,<br/>JD</body></html>';
$mime = new MIME_mail("John Doe <[email protected]>", $to, $str);
$mime->fattach($path,"",OCTET,BASE64,ATTACH);
$mime->attach($html_data,$str, HTML, BASE64);
$mime->send_mail();
}
我不知道是什么问题,我试图寻找通过代码。就像我说的那样,如果我手动运行,它就可以工作。如果cronjob运行它,它不会。
你真的看过你的crontab在创建后的样子吗?如果非cron调用有效,那么cron的调用如果cron作业已正确输入,也应如此。看起来'date'和'final'get vars的值是无效的,因为php认为它是0(从1970年1月1日开始)。 – Friek
我有。 crontab中的那行代码被复制并粘贴到crontab中。在剧本更新之后,它就是这样的节目。 – Albert
查看我的回答;) – Friek