CRONTAB 작업을 실행하여 폴더에서 5일이 지난 파일을 삭제하고 싶습니다.오류를 방지하기 위해 명령 출력을 파일로 전송합니다..
명령줄에서 실행하면 이 명령은 파일을 삭제합니다.
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \;
그러나 stdout 및 stderr 파이프를 얻기 위해 추가하면 실패합니다.
/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \; > /mnt/output/CRONDeleteFiles.txt 2>$1
명령줄에서 오류는 다음과 같습니다.
-bash: $1: 모호한 리디렉션
CRONTAB 이메일 오류 메시지에서 이 오류가 발생합니다.
/bin/sh: 1: 생성할 수 없음: 디렉터리가 존재하지 않습니다.
이것이 내 파이프라인 코드와 관련이 있는 것으로 의심됩니까?
이를 수행하는 올바른 방법은 무엇입니까?
답변1
stderr은 귀하의 예와는 2>&1
달리 stdout으로 리디렉션됩니다 .2>$1
답변2
로거에 쓸 수 있습니다.
find /mnt/SQL_Backups/* -mtime +5 -print -delete 2>&1 | logger -t rmsqlbackups
내 시스템에는 우선순위나 기능(예를 들어)이 없기 때문에 시스템에 -p user.info
기록됩니다 /var/log/messages
. 2>&1
캡처표준 에러또한표준 출력.
>>
또는 자신만의 방법을 사용하여 파일에 씁니다. 비록 출력( ) 대신 추가( )가 필요할 수도 있지만 >
여기에서는 모든 출력 앞에 현재 날짜/시간을 추가하여 다음 사항을 확인할 수 있습니다.
( date; find /mnt/SQL_Backups/* -mtime +5 -print -delete; echo ) >> /mnt/output/CRONDeleteFiles.txt 2>&1