내 Ubuntu 데스크탑 및 Debian 서버에는 매분 실행해야 하는 스크립트(내 분을 호출하는 스크립트)가 있습니다.우주 온라인 검색 게임).
문제는 데비안 파생물에서 /var/log/syslog
실행될 때마다 cron 로그가 기록된다는 것입니다. 결국 다음과 같은 메시지가 반복되는 것을 보게 됩니다 /var/log/syslog
.
Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1)
프로그램의 출력을 억제하기 위해 /dev/null
프로그램의 모든 오류 및 경고 메시지를 숨기는 등의 경로로 리디렉션할 수 있다는 것을 알고 있습니다. crontab에 다음과 같은 줄을 만들 수 있습니다.
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null
하지만 cronjob을 실행하고 생성된 출력이나 오류가 NULL로 파이프되어 시스템 로그에 메시지나 이메일이 생성되지 않도록 하고 싶습니다.
편집:
cron-log를 별도의 로그로 리디렉션하는 솔루션이 있습니다여기에 제안된 대로변경하여/etc/syslog.conf
단점은 모든 cronjob의 모든 출력이 리디렉션된다는 것입니다.
단일 cronjob만 별도의 로그 파일로 리디렉션할 수 있나요? cron.hourly
파일 자체 내부에서 구성하는 것이 좋습니다 .
답변1
다음과 같이 라인을 만드세요.
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
그러면 STDOUT(1) 및 STDERR(2)이 캡처되어 /dev/null
.
이메일 전송
이메일을 설정한 다음 재설정하여 이메일을 비활성화할 수도 있습니다. MAILTO=""
그러면 이메일 전송이 비활성화됩니다.
예
MAILTO=""
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
MAILTO="[email protected]"
* * * * * root /usr/local/sbin/myothercommand.sh
추가 정보
일반적으로 다음과 같은 유형의 메시지를 받게 됩니다 /var/log/syslog
.
Nov 11 08:17:01 manny CRON[28381]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
이는 cronjobs 디렉토리가 실행되었다는 cron을 통한 알림일 뿐입니다. 이 메시지는 이러한 작업과 직접적인 관련이 없지만 crond
데몬에서 직접 제공됩니다. 이에 대해 할 수 있는 일이 별로 없으며 crond
로그를 통해 무슨 일이 일어나고 있는지 확인할 수 있는 유일한 창일 수 있으므로 비활성화하지 않는 것이 좋습니다.
그들이 당신을 극도로 짜증나게 한다면, 당신은 언제든지 통과할 수 있습니다 /var/log/syslog
./etc/syslog.conf
syslog
답변2
1분마다 실행해야 하는 스크립트가 있습니다. 문제는 cron이 실행될 때마다 /var/log/syslog에 기록된다는 것입니다. /var/log/syslog에서 중복된 메시지가 계속해서 표시됩니다.
이를 방지하기 위해 아무 것도 하지 않는 것 같으므로 다음과 같이 질문해 볼 가치가 있습니다.정확히이 스크립트는 무엇입니까?정확히시스템 로그에 표시되는 메시지입니까?
slm의 제안이 작동하지 않으면 무언가가 syslog에 직접 기록되기 때문입니다. 귀하의 의견 중 일부에서 제안하는 것처럼 cron이거나 다른 것입니다.cron에 의해 실행되는 프로세스입니다. syslog로 전송된 메시지는 stdin 또는 stderr에서 온 것이 아니므로 2>&1&>
도움이 되지 않습니다.
관련 애플리케이션의 동작을 구성하는 방법이 있을 수 있지만 그것이 무엇인지는 알 수 없습니다.
메시지를 매우 구체적으로 필터링하기 위해 대부분의 최신 syslog 구현(여러 개가 있음)을 구성하는 방법이 확실히 있습니다. 예를 들어, 로그 메시지에 고유한 태그가 사용된 경우 해당 태그를 대상으로 지정할 수 있습니다. 하지만 다시 말하지만, 특정 메시지나 어떤 syslogd를 사용하는지 모르기 때문에 구체적으로 권장할 사항은 없습니다.
내 일반적인 요점은 "이렇게 하면 모든 메시지가 리디렉션됩니다"라는 이유로 메시지를 리디렉션/필터링하지 않으려는 경우입니다.필터링 기술을 향상시킬 수 있습니다. 귀하가 링크한 서버 장애 스레드에는 시설별 필터링( *.cron
) 만 언급되어 있지만보다 특화된 필터를 구성할 수 있습니다그에 비해.
데비안과 우분투 모두 있습니다시스템 로그쓸 수 있는. Debian 5+에서는 기본 syslog이고, 우분투에서는 옵션이므로 설치해야 합니다. 특정 콘텐츠에 대한 필터를 만들려면 필터를 안에 넣으세요.상단 근처(즉, 다른 규칙 이전, 일반 구성, 모듈 로딩 이후 등) /etc/rsyslog.conf
. 가장 좋은 방법은 파일 자체를 편집하는 것이 아니라 50보다 작은 두 자리 숫자로 시작하는 이름을 가진 rsyslog.conf
파일을 디렉토리에 생성하는 것입니다 . 즉, 다음과 같이 입력할 수 있습니다./etc/rsyslog.conf.d/
/etc/rsyslog.conf.d/15-my-filter.conf
:msg, contains, "/usr/bin/w3m -no-cookie" /dev/null
그러면 메시지가 /dev/null
(또는 원하는 경우 별도의 로그로) 전송됩니다. 그러나 메시지는 후속 규칙을 통해 계속 전송됩니다 /var/log/syslog
. 이를 방지하려면:
& stop
또 다른 줄이 이어집니다. 이전 규칙과 일치하는 모든 항목을 삭제합니다. 또는 단일 줄 규칙의 경우 stop
규칙 줄 끝에 추가할 수 있습니다 .
rsyslogd
구성을 변경한 후에는 재부팅이 필요합니다(예: systemd 시스템에서 systemctl restart rsyslog
).
kill -HUP $(cat /var/run/rsyslogd.pid)
HUP로 인해 데몬이 자체적으로 다시 시작됩니다.
답변3
변화/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
라인은""
답변4
/dev/null
숨겨진 명령의 출력을 리디렉션합니다 . 이렇게 하지 않으면 cron이 출력을 메일로 보냅니다. 이 명령의 출력은 시스템 로그에 전혀 나타나지 않습니다(적어도 cron은 이를 수행하지 않습니다).
일반적으로 출력, 특히 오류 출력을 리디렉션하는 것은 좋지 않은 생각입니다 /dev/null
. 문제가 발생하면 문제를 진단할 정보가 없습니다. 메일 수신을 원하지 않으시면 로그 파일로 리디렉션해주세요.
그러나 이 중 어느 것도 귀하의 질문과 관련이 없습니다. 인용한 메시지는 cron 자체에서 나온 것입니다. Cron은 작업을 실행할 때마다 로그 항목을 작성합니다. 내가 본 크론 구현에서는 다양한 작업에 대해 다양한 로그 구성을 사용할 수 없습니다.
특정 작업을 생략하려는 경우 유일한 옵션은 syslog 데몬의 로그 메시지에 텍스트 필터링을 적용하는 것입니다. syslog 필터링의 사실상 표준은 다음을 실행하는 것입니다.시스템 로그(이것은 시스템의 기본값일 수도 있고 아닐 수도 있습니다.) syslog 데몬으로. 바라보다골디락스의 대답이 특정 명령을 필터링하는 방법을 알아보세요.