cron이 syslog를 채우지 못하게하려면 어떻게해야합니까?


31

매분마다 실행 해야하는 스크립트가 있습니다. 문제는 cron이 /var/log/syslog실행될 때마다 로그인한다는 것입니다. 나는 이런 식으로 반복되는 것을 보게됩니다 /var/log/syslog.

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

데비안을 사용하고 있습니다.

내 질문은 : 매번 cron 에게이 정보를 syslog에 쓰지 말라고 말할 수있는 방법이 있습니까?


1
Busybox 플랫폼 에서이 작업을 수행하는 방법을 알고 있습니까? /etc/syslog.conf의 형식은 다릅니다 ...
Mark Lakata

답변:


25

cron의 출력을 별도의 로그 기능으로 보내 /etc/syslog.conf파일에 다음을 추가 할 수 있습니다.

# Log cron stuff
cron.*                                                  /var/log/cron

예를 들어 회전하도록 추가 /var/log/cron해야합니다 /etc/logrotate.d/syslog. 예 :

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

입력 해 주셔서 감사합니다. cron. * / var / log / cron을 추가하고 cron을 다시 시작했지만 / var / log / cron을 비워두고 메시지를 / var / log / syslog에 계속 덤프합니다. 왜 아무것도하지 않는지 확실하지 않습니다
user7321

1
오, 내 편에 서사시 실패. syslog.conf를 편집하고 cron을 다시 시작했습니다! 당연히 그것은 ... 나는 시스템 로그 =)하지 작업을 다시 시작하지 않았습니다 바라
user7321

1
cron.log를 활성화해도 cron 메시지가 syslog에 기록되지 않습니다.
basic6

16

승인,

내 질문에 대한 해결책은 다음과 같습니다.

변화

*.*;auth,authpriv.none     -/var/log/syslog

*.*;cron,auth,authpriv.none     -/var/log/syslog

/etc/syslog.confsyslog 내에서 다시 시작

/var/log/cron.logDave Cheney가 제안한대로 cron을 보냈고 그것에 logrotate를 붙였습니다. Daves 제안에 대한 나의 수정은 다음과 같은 이유로 내 상황에 가장 적합합니다.

  1. 그것은 계속 /var/log/syslog크론 메시지를 어수선하게되는
  2. 여전히 cron 메시지가 나타납니다 (문제 해결에 좋습니다)
  3. logrotate가 /var/log/cron.log너무 커지지 않습니다.

7
현대 시스템에 관심이있는 사람들을 위해 rsyslog데비안 8.0 Jessie /etc/rsyslog.conf가 있으므로 편집해야합니다. 그건 그렇고, 추가 할 문자열은 기본적으로 이미 존재하므로 주석 처리를 해제해야합니다 (63 행). 그리고 /var/log/cron.log이미 /etc/logrotate.d/syslog패키지 메인테이너가이 스레드를 읽고처럼.
TranslucentCloud

귀하의 질문은 Is there any way I can tell cron not write this information to syslog every time입니다. 이것은 답이 아닙니다.
ntd

@TranslucentCloud 우분투 14 LTS의 rsyslog 구성이 /etc/rsyslog.d/50-default.conf에 있음을 추가하고 싶었습니다.
Johnny

8

/ etc / default / cron 변경

  # Or, to log standard messages, plus jobs with exit status != 0:
  # EXTRA_OPTS='-L 5' 
  #
  # For quick reference, the currently available log levels are:
  #   0   no logging (errors are logged regardless)
  #   1   log start of jobs
  #   2   log end of jobs
  #   4   log jobs with exit status != 0
  #   8   log the process identifier of child process (in all logs)
  #
  EXTRA_OPTS="-L 0"

기본적으로 EXTRA_OPTS 줄은 ""입니다.


이 IMO는 올바른 솔루션입니다. 로그 레코드를 생성하지 마십시오.
ntd

4

우분투 14.04.5 (및 다른 곳에서)에는 syslogd 대신 rsyslogd가 있습니다. TranslucentCloud는 Debian Jessie와 함께 이것을 암시했지만 동일한 솔루션 (그러나 syslogd.conf 대신 rsyslog.conf 변경)은 우분투에서 작동하지 않는 것으로 보입니다.

변경하기 위해 더 나은 그래서 /etc/rsyslog.d/50-default.conf에 설정된 값이 실제로 /etc/rsyslog.conf에서 물건 세트보다 우선합니다 표시 다음 다시 시작 위해 rsyslog 및 크론합니다. 그렇지 않으면 당신은 여전히 시스템 로그에 크론 로그의 기본 동작하게 될 겁니다 플러스 (하지만 전용) cronlog하는 크론 로깅.

내 /etc/rsyslog.d/50-default.conf의 첫 줄 몇 줄 :

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

그리고 짜잔!


1
아주 좋은 대답입니다. 즉, 스택 오버플로에 대한 향후 참여를 위해 새로운 질문에 집중하고 싶을 수 있습니다.
Magellan

3

방금 다른 방법 으로이 문제를 해결했지만 목표는 약간 다릅니다. atrun을 실행할 때 생성 된 cron 로그 항목을 삭제하여 하드 드라이브가 잠자기 상태가되어 5 분마다 깨지 않도록하고 싶었습니다.

syslog.conf의 로그 이벤트 대상에 파이프 접두어를 추가하여 쉘 명령이 될 수 있으므로 grep을 사용하여 원하지 않는 것을 버렸습니다. 그래서:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

조사하지는 않았지만 원하는 경우 해당 로그 항목을 다른 대상으로 보낼 수 있어야합니다.


3

실제로 '최고'(하나는 주장 할 수 있음) 솔루션은 @DaveCheney가 제안한 것과 user7321 이 결국 한 것을 결합한 것입니다.

  1. syslogd가 cron 관련 로그 메시지를 / var / log / syslog에 추가하지 못하도록 방지
  2. 크론 로그 메시지가 특정 위치 (특히 / var / log / cron)에 기록되도록하고 크론 로그의 로그 회전을 보장합니다.
  3. syslogd가 cron 관련 로그 메시지를 / var / log / messages에 추가하지 못하도록 방지

에서 /etc/syslog.conf이러한 제안을 조합하면 다음과 같이 변경됩니다.

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

으로:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

cron 및 syslogd 서비스를 강제로 다시로드하거나 다시 시작하는 것을 잊지 마십시오 (예 :

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

참고 : 이것은 rsyslogd에서도 작동합니다.


가장 좋은 해결책은 @dfc가 제안한 것입니다. 즉, 처음에는 로그를 생성하지 않습니다.
ntd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.