cron의 맨 페이지에 따르면
명령을 실행할 때,모든 출력crontab의 소유자(또는 crontab의 MAILTO 환경 변수가 있는 경우 해당 사용자)에게 메일로 전송됩니다. -s 옵션을 사용하여 모든 작업 출력을 syslog로 보낼 수도 있습니다.
cron 작업을 실행할 때 cron 데몬이 출력을 기록하는 데 어려움을 겪는 이유를 이해하려고 합니다. 직장에서 리디렉션을 사용하는 것도 효과가 있을 것 같나요?
"모든 출력"에 둘 다 포함됩니까?
- cron 데몬에 의해 실행된 작업에 의해 생성된 출력
- cron 데몬 자체에서 생성된 출력?
만약에
"모든 출력"은 cron 데몬 자체에 의해 생성된 출력이 아니라 cron 데몬에 의해 실행된 작업에 의해 생성된 출력일 뿐입니다.
우리는 출력이 어떤 파일에 기록될 것인지가 아닌 출력의 내용에만 관심을 갖습니다.
-s
cron의 로그인/이메일 기능(예: 옵션 등)을 사용하는 대신 작업의 명령 출력을 다른 파일로 리디렉션하도록 cronab 파일의 작업 줄에 지정할 수 있습니까 ?
30 18 * * * rm /home/someuser/tmp/* > /home/t/mycron.log 2>&1
감사해요.
답변1
"모든 출력"이란 "작업의 명령이 표준 출력 또는 표준 오류로 보내는 모든 것"을 의미합니다.
실행 중인 명령에 표준 출력을 파일로 리디렉션하는 것이 포함되어 있으면 전체 명령이 표준 출력을 모두 파일로 리디렉션하므로 표준 출력을 내보내지 않습니다.
작업에 의해 생성된 출력은 작업을 소유한 모든 사용자의 속성으로 간주됩니다. 작업 실행에 대해 cron 데몬 자체에서 생성된 로그 메시지(예: 무엇을 실행했는지, 언제, 누구의 계정에서 실행했는지, 무엇을 실행했는지) 작업의 결과 코드는 )은 시스템 관리자의 자산으로 간주됩니다.
-s
데몬 'cronie'에 대한 옵션으로 인해 cron
작업 출력이반품시스템 관리자가 보다 쉽게 사용할 수 있도록 시스템 로그에 기록합니다. 또한 로컬 이메일 서비스가 작동하지 않는 시스템에도 유용할 수 있습니다.
그렇습니다. 출력을 리디렉션할 수 있습니다. 그러나 일반적으로 표준 오류 출력을 리디렉션하는 것도 주의해야 합니다.
30 18 * * * rm /home/someuser/tmp/* > /home/t/mycron.log 2>/home/t/mycron.errors.log
...또는 동일한 파일에 stdout과 stderr을 모두 제공하려는 경우 다음 약식을 사용할 수 있습니다.
30 18 * * * rm /home/someuser/tmp/* > /home/t/mycron.log 2>&1
(표준 rm
명령은 일반적으로 표준 출력에 아무 것도 인쇄하지 않으며 모든 오류는 표준 오류로 이동합니다. 이것이 두 출력 유형을 모두 캡처해야 하는 이유입니다.)