2013-04-17 1 views
0

나는 시스템이 예약이 만료되기 전에 어느 날 전자 메일을 사용자에게 보낼 수있는 새로운 기능을 개발하려고합니다. 저는 PHP 스크립트를 작성하고 crontab을 사용하여 매일 아침 PHP 파일 실행을 시작했습니다. 이제 문제는 PHP 파일을 컴파일하면 모든 것이 잘 작동하고 전자 메일이 사용자에게 전송된다는 것입니다. 내가 쓴대로 나는 maillog를 확인하면Crontab이 올바른 사람에게 PHP 알림 전자 메일을 보내지 않음

to=<[email protected]>, ctladdr=<blablala> (0/0), delay=00:04:12, xdelay=00:04:12, mailer=esmtp, pri=120371, relay=XXXXXXX., stat=Sent (r3HMoisd031604 Message accepted for delivery) 

을 이야기하지만이 같은 PHP 파일을 실행하기 위해 crontab을 사용하는 경우, 메일이 서버의 루트로 전송됩니다,하지만 "[email protected]" PHP 파일.

to=<[email protected]>, ctladdr=<blablabla> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30958, dsn=2.0.0, stat=Sent 

무엇이 문제 일 수 있습니까? PHP 파일이 crontab에서 예상대로 작동하지 않는 이유는 무엇입니까? 누구든지 도울 수 있니?

내 PHP 파일 - "demo.php"

require_once "defaultincludes.inc"; 
global $tbl_entry, $tbl_users; 

$current = mktime(date("H"),date("i"),0,date("m"),date("d"),date("Y")); 
$start = $current + 12*3600; 
$end = $current + 40*3600; 

$query="SELECT U.email, U.fullname, E.name FROM $tbl_entry E, $tbl_users U " 
     ." WHERE U.name = E.create_by " 
     ." AND E.end_time >= $start " 
     ." AND E.end_time <= $end "; 
$result= sql_query($query); 
$mail_list=array(); 
for ($i=0; ($row=sql_row_keyed($result,$i));$i++) 
{ 
    $temp=array(); 
    $temp[]=$row['fullname']; 
    $temp[]=$row['email']; 
    $temp[]=$row['name']; 
    $mail_list[]=$temp; 
} 

for ($i=0; $i<count($mail_list); $i++) { 
    $to = $mail_list[$i][1]; 
    $subject= "Reminder of ".$mail_list[$i][2]; 
    $body = "Hi ".$mail_list[$i][0].",\n" 
      ." Your reservation ".$mail_list[$i][2]." will expire in one day"; 
    mail($to,$subject,$body); 
} 

crontab 파일 - "reminder.txt"

30 7 * * * /var/www/html/qars-vm90/demo.php 
+0

당신은 2 개의 루프와 표준이 필요하지 않지만()은 훨씬 쉬울 것입니다. –

답변

0
/var/www/html/qars-vm90/demo.php 

스크립트가 실행 가능으로 표시된 경우에만 작동합니다. 또한 셸에게 파일의 처리 방법을 알려주려면 파일의 상단에 shebang이 있어야합니다 (펄, PHP, 파이썬 등으로 실행해야합니다)

나는 파일이 실행 가능하지 않다는 cron의 오류 메시지입니다. 루트로 로그인하면 해당 메시지를 읽을 수 있어야합니다.

가장 간단한 변화는 그것은 또한 크론의 환경을 기억 가치가

30 7 * * * php /var/www/html/qars-vm90/demo.php 

에의 crontab을 변경 아마 자주 명령 행에서 얻을 (로그인 쉘 및 모든) 것과 약간 다른

+0

하하, 예, 어제 문제를 알아 냈습니다. 그 이유는 파일 이름 앞에 "php"명령이 없기 때문입니다. 도와 주셔서 감사합니다. – user1453951

0

충분하지 않은 정보는 귀하의 질문에 대답합니다. PHP 스크립트는 어디에서 이메일 주소를 가져 옵니까? 어떤 사용자가 정상적으로 실행되며 cron에서 어떤 사용자가 실행됩니까?

+0

은 코드를 추가했습니다. 감사합니다. – user1453951

+0

그래, 그건 나에게 의미가 없습니다. [email protected]을 이메일 주소로 사용하는 사용자가 없다는 것을 확인 하시겠습니까? –

관련 문제