syslog의“(CRON) 정보 (MTA가 설치되지 않았으며 출력을 버림)”오류


198

여러 서버에 Ubuntu 12.04.1 LTS를 새로 설치했습니다.

cron 작업을 추가하거나 해당 서버에서 crontab을 편집하지 않았지만 각 컴퓨터마다 거의 같은 시간에 스파이크가 발생했을 때 75 %의 CPU 스파이크와 내 syslog에 다음 정보가 표시됩니다.

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Mono-complete가 설치되어 있고 서비스 스택 웹 서버를 실행 중입니다.

이 문제를 방지하는 가장 좋은 방법은 무엇입니까? CPU 스파이크를 제거하고 싶습니다.


매일 6:25에? 그것들은 /etc/cron.daily/의 스크립트입니다. 메일을 보내려고하는 사람은 단 하나뿐입니다 : 인기 경쟁. 스크립트를보고 어떤 스크립트가 메일을 보내려고하는지보십시오. 좁혀 야합니다. 그런 다음 'chmod 0644 /etc/cron.daily/script-name'을 실행하지 마십시오.

답변:


173

Linux는 메일을 사용하여 사용자에게 알림을 보냅니다. 대부분의 Linux 배포에는 메일 서비스 (MTA 포함)가 설치되어 있습니다. 우분투는 그렇지 않습니다.

메일 서비스 (예 : postfix)를 설치하여이 문제를 해결할 수 있습니다.

sudo apt-get install postfix

아니면 무시해도됩니다. cron이 메시지를 보낼 수 없다는 점이 CPU 스파이크와 관련이 있다고 생각하지 않습니다 (cron이 실행중인 기본 작업과 연결되어 있음). MTA를 설치 한 다음 메시지를 읽는 것이 가장 안전 할 수 있습니다 ( mutt시스템 메일 리더가 좋습니다).


5
postfix가 설치하기에 좋은가요? 사용하기 가장 쉬운 MTA는 무엇입니까?
endolith

2
postfix는 리눅스에서 가장 널리 사용되는 메일 서버입니다.
Rápli András

5
설치 절차 중 cron과 함께 사용하려면 (즉, 실제로 전자 메일을 외부로 보내지 않으려는 경우) 로컬 전용으로 구성하도록 응답해야합니다.
steffen

postfix에 더 좋은 방법이 있다면 메일을 확인하는 유일한 방법은 (데비안) 이 mail제공하는 것 mailutils입니까?
ThorSummoner

79

이것은 cron 작업이 출력을 생성 한 다음 cron 디먼이 해당 출력을 사용자에게 전자 우편으로 보내려고하기 때문에 발생합니다 (예 : 루트). 해당 출력이 필요하지 않은 경우이를 해결하는 가장 쉬운 방법은 crontab에서 출력을 버리는 것입니다.

sudo crontab -e

>/dev/null 2>&1모든 작업에 추가하십시오 .

* * * * * yourCommand >/dev/null 2>&1

10
이 방법의 문제점은 높은 CPU 사용량을 설명하지 못한다는 것입니다. Cron은 분명히 의사 소통을 시도하고 있으며 이것은 본질적으로 출력을 무시하는 것입니다. 유용한 디버그 정보가있는 경우를 대비하여 출력을 폐기하는 것보다 처리하는 경향이 더 큽니다.
Oli

1
Oli, 이것은 오래된 질문이지만 동일한 문제가 발생하지만 Raspberry PI에 있습니다. No MTA installed, discarding output로그에 많은 메시지 가 표시되고 프로그램이 결국 자체 실행을 중지합니다. CPU 스파이크 때문이라고 생각합니다. 이 질문에 게시 된 모든 답변은 그것을 무시하는 것처럼 보입니다.
ThN

4
출력을 유지하려면 명령을 스크립트에 넣고 stdout 및 stderr를로 파이프하십시오 logger. 예를 들면 다음과 같습니다 yourCommand >/dev/null 2>&1 | logger -t mycmd. 그러면 안전한 보관을 위해 출력이 syslog에 저장되고 MTA 불만이 중지됩니다.
CivMeierFan

56

필자의 경우 메시지는 bash 스크립트의 권한 문제를 암시했지만 MTA를 설치하기 전까지는 볼 수 없었습니다.

제안한대로 나는 다음을 실행했다.

sudo aptitude install postfix

설정하는 동안 그리고 cron 작업을 다시 실행 한 후 "로컬"을 선택했습니다.

sudo tail -f /var/mail/<user>

내 경우에는 교체

<user>

"루트"로.

그런 다음 권한과 관련된 오류 출력을 볼 수있었습니다.


3
작업 오류를 확인하기 위해 메일 함을 확인하는 방법에 대한 추가 의견에 감사드립니다!
스튜어트 앨런

32

이전 답변에서 언급했듯이 이것은 cron 작업이 출력을 생성 한 다음 cron 데몬이 해당 출력을 사용자에게 이메일로 보내려고하기 때문에 발생합니다. MTA를 설치하지 않고 (또는 설치할 수는 없지만) 출력을 보려면 cron 작업의 출력을 로그 파일로 리디렉션 할 수 있습니다. 로 crontab 파일을 편집하십시오

crontab -e

( sudo문제가 루트의 crontab에있는 경우 사용 ) 다음과 같이 모든 명령 뒤에 추가 하십시오.>> /some/log/file 2>&1

0 3 * * * cmd   >> / some / log / file 2> & 1

줄에 여러 개의 명령이   있거나 , 또는로 구분 된 ;경우  다음과 같이 각 명령에 대해 위의 작업을 수행해야합니다.&&||

0 3 * * * cmd 1   >> / some / log / file 2> & 1;  cmd 2   >> / some / log / file 2> & 1

또는 다음과 같이 그룹화하십시오.

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / some / log / file 2> & 1

stdout을 무시하고 stderr 만 캡처하려면 대신 사용하십시오. 원하는 위치 (홈 디렉토리 ) 또는 보관할 필요가없는 경우 에도 로그 파일을 저장 하십시오.> /dev/null 2>> /some/log/file/var/log/tmp

그런 다음 작업이 실행 된 후 로그 파일을보십시오.


28

crontab에서 이것을 첫 줄로 추가하십시오 :

MAILTO=""

이것은 cron이 이메일을 보내지 못하게합니다.


4
의견 (넣지 마십시오 #후를) MAILTO=""또는 작동하지 않습니다
SBF

23

MTA (현재 필요하지 않은)를 설치하지 않으려는 경우 cron 작업 결과를 로그 파일로 파이프 할 수 있습니다.

sudo crontab -e

그러면 크론 작업과 함께 다음과 같이 보일 것입니다.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

그런 다음 통나무를 꼬리로 막고 무슨 일이 있었는지 확인할 수 있습니다.

sudo tail -f -n 50 /var/log/somelogfile.log

이것이 내가 syslog에 해당 메시지를 보는 서버에서 수행 한 작업입니다.


이 작업을 수행했지만 파일에 로깅이 추가되지 않았습니다.
pir

크론 작업이 실행 중입니까?
Andrew MacNaughton

예, 시스템 로그에 시작 중임을 표시합니다.
pir

1
출력을 파일로 stderr에 캡처하려면 줄 끝에 '2> & 1'이 필요합니다.
MattSmith

15

이것은 오래된 질문이지만 일부 상황에서 유용한 추가 답변이 있습니다.

cron 명령의 출력을 통해 loggersyslog로 끝납니다.

postfix를 설치하는 것보다 약간 더 쉽고,이 로그를 다른 로그와 함께 syslog에 넣습니다. 이 명령은 stdout 및 stderr을 캡처하므로 메시지가 표시되지 않으며 No MTA installedsyslog에 모든 출력이 표시됩니다.

크론 항목 예 :

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

다음을 mycmd사용 하여 태그가있는 로그를 볼 수 있습니다 .

grep 'mycmd' /var/log/syslog

파이프는 크론 작업에서 작동합니까?
CivMeierFan

10

/dev/null 2>&1cron job 명령 에 추가 하면 부작용 은 STDERRSTDOUT(표준 오류 및 출력)을 모두 버립니다 . cron에서 이메일을 원하지 않으면 잘 작동합니다. 그러나 오류를 이메일로 보내려면 >/dev/null대신 사용하십시오. 자세한 설명은이 블로그 게시물을 참조하십시오 .

그래도 오류 이메일을 보내려면 MTA (메일 전송 에이전트)를 설치해야합니다. Postfix는 다음과 함께 설치하기에 충분히 간단합니다.sudo apt-get install postfix


내가 이해 한 한 '> / dev / null'은 그것들 만 보낼 것이고 '> / dev / null 2> & 1'은 모든 오류를 도징 할 것입니까? 로그에 오류가 발생하지만 메일이없는 경우 무엇을 사용해야합니까? 지금은 더 메일을 얻을 (내가 원하는)하지만 추악한 '더 MTA ...'
피트

2
afaik, 출력을 이메일로 보내는 것 외에는 기록 할 수있는 방법이 없습니다. 가장 가까운 방법은 로컬 메일 배달을 위해 postfix를 설정하는 것입니다 ( "sudo apt-get install postfix"를 실행하면 로컬 배달을 설정할 것인지 묻는 메시지가 나타납니다. 처음에는 고통스러운 것처럼 보였지만 실제로 작동합니다. ssh를 통해 로그인 할 때마다 이전 작업이 실패한 경우 시스템에 새 이메일이 표시됩니다. 로그를 확인하는 것보다 더 편리합니다.
paneer_tikka

2
  1. 처음 postfix에는 문제를 해결할 수있는 install

    sudo apt-get install postfix
    
  2. 우분투라면 crontab파일을 편집 할 수 있습니다

    sudo vim /etc/crontab
    
  3. 주의, 상단 파일을 편집하고 첫 줄에 코드가 없으면 입력하십시오.

    MAILTO=root // current system user
    
  4. cron어떤 작업을 실행, 당신은 이메일을 얻을 것이다

    mail
    

1
귀하의 답변은 좋은 것 같지만 모든 지시 사항을 이해하지 못했습니다. 어쩌면 당신은 그것을 향상시킬 수 있습니다.
zx485


1

Kitematic Docker 도구를 사용하여이 문제가 발생했습니다 .
magento 컨테이너로 이동하여를 클릭하십시오 exe.

그런 다음 실행

apt-get update

이것은 magento가 kitematic에서 실행되도록하려는 경우입니다. 로그는 가상 머신에서이 오류를 표시합니다.

업데이트가 필요합니다.

이것이 당신을 잃어 버렸다면 미안하지만 그것이 작동하는 방식입니다. 당신은 계속 길을 잃었지만, 그것에 대해 읽으면 그 조각들은 하루 만에 올 것입니다. 인내심을 가지십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.