나는 사용한다투스네이퍼make 명령은 관리에 사용됩니다.태스냅다음과 같은 백업:
tarsnapper -c /usr/local/etc/tarsnapper.conf make
이렇게 작동해야 합니다. 이렇게 출력됩니다.
Creating backup mail: mybackupjob-20150610-092951
3 backups are matching
0 of those can be deleted
이제 cron에서 이렇게 실행합니다(cron은 Ubuntu 15.04의 /bin/sh에서 실행되는 것 같습니다).
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
그렇지 않으면 작동하지만 어떤 이유로 cron을 통해 이메일에 출력(stdout)이 계속 표시되므로 stdout을 /dev/null로 리디렉션하는 것이 원하는 대로 작동하지 않는 것 같습니다.
리디렉션을 사용하여 cron 없이 명령을 실행하여 디버깅을 시도했지만 실행 시 여전히 출력이 표시됩니다.
tarsnapper -c /usr/local/etc/tarsnapper.conf make >/dev/null
그러면 이 tarsnapper 호출의 일반 출력(stdout)을 /dev/null로 올바르게 리디렉션하려면 어떻게 해야 합니까?
다른 명령으로 리디렉션할 때 이런 문제가 발생한 적이 없으므로 >/dev/null
tarsnapper 작동 방식과 관련이 있는 것 같습니다. 그렇죠?
나는 tarsnapper가 tarsnap 바이너리를 호출하는 Python 스크립트라는 것을 알고 있습니다.
표준 출력 리디렉션에 대한 답변을 찾으려고 했지만 문제를 해결하는 항목을 찾을 수 없습니다.
답변1
도대체 질문을 게시한 직후(답을 찾으려고 한두 시간 정도 노력한 후에) 문제를 발견했습니다.
tarsnapper는 모든 일반 출력을 stdout 대신 stderr로 출력하는 것 같습니다. 나는 이것이 tarsnapper의 버그라고 생각합니다.
하지만 내 자신의 질문에 답하려면 "정상 출력"을 제거하기 위해 리디렉션(stderr를 리디렉션하기 위해)을 사용해야 2>/dev/null
하지만 실제 오류가 있을 수 있다고 하더라도 출력을 얻지 못할 것입니다. cron에서 이메일을 받는 것과 같은 오류가 발생한 경우에도 계속 수행하세요.
편집하다:
임시 "솔루션"으로 tarsnapper(stdout 및 stderr)의 모든 출력을 리디렉션하고 이를 cron의 로그 파일에 추가했습니다.
0 2 * * * PATH=$PATH:/usr/local/bin tarsnapper -c /usr/local/etc/tarsnapper.conf make >>/var/log/tarsnapper-cron.log 2>&1
/var/log/tarsnapper-cron.log
따라서 내 이메일을 cron 스팸으로 보내지 않고도 tarsnapper가 어떻게 작동하는지 확인하고 싶은지 확인할 수 있습니다 .
이메일에서 발생할 수 있는 오류도 자동으로 얻을 수 있다면 분명히 더 좋겠지만, 현재 tarsnapper 자체를 수정하거나 tarsnapper 출력을 구문 분석하고 오류가 있는지 여부를 알아내는 스크립트를 만들지 않고서는 불가능해 보입니다. 출력 텍스트.