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