답변:
데이터를 기록하는 전통적인 "표준"방식은 syslog 이며 메시지에 포함 된 메타 데이터는 "기능 코드"및 우선 순위 수준입니다. 기능 코드는 다른 서비스와 로그 스트림을 분리하여 다른 로그 파일 등으로 분할 될 수 있도록 사용할 수 있습니다 (시설 코드는 전통적인 의미를 가지고있어 다소 제한적 임에도 불구하고).
syslog에없는 것은 다른 사용자와 메시지를 구분하는 방법이며 cron
기존의 다중 사용자 시스템에 필요한 것입니다 . 모든 사용자의 cron 작업에서 시스템 관리자 만 볼 수있는 공통 로그 파일로 메시지를 수집하는 것은 아무 소용이 없습니다. 반면에 전자 메일은 다른 사용자에게 메시지를 보낼 수있는 기능을 제공하므로 논리적으로 선택해야합니다. 대안은 cron이 수동으로 작업을 수행하고 각 사용자의 홈 디렉토리에 로그 파일을 작성하는 것이지만 기존의 다중 사용자 유닉스 시스템은 작동하는 MTA를 가진 것으로 가정하므로 cron에서 구현하는 것은 대부분 헛된 운동.
현대 시스템에서는 물론 다른 선택이있을 수 있습니다.
"로그"한다는 것은 실제 작업 출력을 저장하는 것을 의미한다고 가정합니다. 실행중인 작업이 이미 크론 로그에 기록된다 /var/cron/log
(경로는 시스템마다 다를 수있다). 이 로그에는 MTA가 필요하지 않습니다.
cron 작업은 crontab 작업이 속한 사용자로 실행됩니다.
일반적으로이 사용자가 시스템에서 파일을 만들 수 있다는 보장은 없습니다 (사용자는 대화 형 사용자가 아닐 수 있음). 특히 /var
로그가 일반적으로 생성 되는 계층 구조에서는 그렇지 않습니다 . 따라서 사용자에게 오류 및 기타 작업 결과를 알리는 가장 안전한 방법은 오류를 수집하여 전자 메일로 사용자에게 보내는 것입니다. 이를 통해 사용자는 계정이 원하는 위치의 오류를 볼 수 있도록 이메일 리디렉션을 설정할 수 있습니다.
사용자가 작업 출력을 파일로 저장하려면 crontab에서 간단한 리디렉션을 사용하여 수행 할 수 있습니다.
0 */2 * * * "$HOME/scripts/myscript" >"$HOME/logs/myscript.log" 2>&1
이것은 "$HOME/scripts/myscript"
매시간마다 매시간 실행 되며 모든 출력을에 저장 합니다"$HOME/logs/myscript.log"
. 모든 출력이 경로 재 지정되므로이 작업을 실행하여 이메일이 작성되지 않습니다. 이 없으면 2>&1
오류 메시지는 여전히 이메일로 전송됩니다.
이를 통해 사용자는 출력 위치를 선택할 수 있습니다.