2011-08-05 2 views
0

두 주간의 미리 알림을 구독자에게 보내는 PHP 스크립트가 있습니다. 이메일을 보낼 때마다 "Cron Daemon"에서 오는 이메일도 발송됩니다. 처음 스크립트를 작성했을 때,이 이메일을 보내지 않았지만 지금은 않습니다. 이것에 대해 몇 가지 질문이 있습니다.전자 메일 목록 스크립트를 실행할 때 Cron Daemon의 추가 전자 메일

Set-Cookie: PHPSESSID=((random letters and numbers here)); path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-type: text/html 
  1. 이 이메일은 무엇을 의미 하는가 :

    이 이메일의 말씀인가?

  2. 본 이메일이 전송되는 이유는 무엇입니까?
  3. 스크립트가이 이메일을 보내지 못하게 할 방법이 있습니까?

답변

1

크론은 실행되는 명령의 stdout/stderr를 읽습니다. 무엇인가 작성되면 cron이 전자 메일을 보냅니다.

PHP 실행 파일은 "cgi"또는 "fcgi"로 컴파일되어 기본적으로 해당 헤더를 방출합니다.

  • (즉 당신의 cron 명령에 > /dev/null 2>&1를 추가 의미)는/dev/null로
  • PHP
  • 의 "CLI"버전 리디렉션 표준 에러와 표준 출력을 사용

    는 분명히 세 가지 가능한 솔루션이이 문제를 해결하려면 .
  • MAILTO=""을 정의하십시오 (this page 참조).
+0

리디렉션 팁을 보내 주셔서 감사합니다. 필자는 'php -q'를 사용하여 모든 것을 침묵시킬 것이라고 생각하지만 실제로는 그렇지 않습니다. 이것은 PHP 매뉴얼에서 HTTP 헤더 출력을 억제하는 것으로 정의됩니다. '>/dev/null 2> & 1'을 추가하면 효과적입니다. –

0

내 생각에 PHP 스크립트가 출력물을 렌더링하고 있습니다. 아무것도 렌더링되지 않으면 cron은 기본 관리자 전자 메일로이를 전달합니다.

1) 전혀 출력되지 아무것도 당신의 PHP 스크립트를 수정 :

이 두 가지 해결책이있다. 이것은 때로는 어려운 것보다 특히 사소한 스크립트의 경우 더욱 그렇습니다.

2) 출력이있는 에서 cron 스크립트를 방지하십시오. 이 방법의 단점은 스크립트가 실패 할 때 통지하지 않는다는 것입니다. 출력을 중지하려면 다음과 같이하십시오.

#Before 
* * * * * php /path/to/script 
#After 
* * * * * php /path/to/script > /dev/null 2>&1 
+0

저는 PHP에 능숙하지만 기술적 인 대화에 대해 잘 알지 못합니다 (프로그래밍을 배우기 위해 Google을 사용할 때 일어나는 일입니다). 스크립트가 출력되는 것을 막음으로써 변수를 전달하거나 헤더 정보와 같이 더 미묘한 것을 전달하는 것입니까? 수정해야 할 부분을 파악하는 데 도움이되는 스크립트를 게시해야합니까? – Jim

+0

출력이 없으면 명령 줄에 아무 것도 쓰지 않습니다. 도움이 될만한 것들이 몇가지 있습니다 : 스크립트 (PHP 코드가 많이 추천하는)에'%>'를 넣지 말고,'echo' 또는 유사한 문장을 사용하지 말고' %>'및'<%'태그를 사용하십시오. 또한 PHP의 일부 메소드는 출력에 직접 씁니다. 원하는 경우 게시 할 수 있습니다. – OverZealous

+0

또한 위의 vstm의 업데이트가 메시지 내용을 고려할 때 올바른 대답 일 수 있다고 생각합니다. – OverZealous

관련 문제