cron 예약 작업을 실행하기 위해 find를 사용할 때 이상한 문제가 발생했습니다. 두 가지 작업이 수행되었습니다.
- 첫 번째 줄은 "read_"로 시작하고 ".gz"로 끝나는 파일을 매일 밤 3일 이상 삭제해야 합니다.
- 두 번째 줄은 ".gz.md5"로 끝나는 1분보다 오래된 파일을 매 분마다 제거해야 합니다.
1 1 * * * find <path that defiantly does not match> -type f -iname "read_*.gz" -ctime +3 -delete
*/1 * * * * find <path that defiantly does not match> -type f -iname "*.gz.md5" -cmin +1 -delete
일반적으로 이것은 잘 작동하지만 때때로 01:01에 cron에서 다음과 같은 오류 메시지가 나타납니다.
Cron <root@hostname> find <path that defiantly does not match> -type f -iname "read_*.gz" -mtime +3 -delete
find: ‘<path that defiantly does not match>/<hostname>/captured-syslog-1617836127-1617836351.gz.md5’: No such file or directory
그러나 내 관점에서는 그것은 말이되지 않습니다.
답변1
사실: 01:01에 두 개의 작업이 동시에 실행 중이었습니다.
가정: 문제의 파일 시스템은 디렉터리 항목에 파일 형식을 저장하지 않습니다.
가능한 설명
어느 시점에서는 find
조사 중인 파일의 유형을 알아야 합니다. 명시적 -type
테스트가 이유가 될 수 있지만, 그것이 없더라도(어떤 경우에는 그 이전에도) find
파일이 디렉터리인지 알아야 합니다. 디렉터리인 경우 find
해당 디렉터리에 삭제됩니다.
귀하의 파일 시스템이 파일 유형 정보를 디렉토리 항목에 저장하지 않는 것 같습니다. 이 경우 파일 형식을 알고 싶으면 find
호출이 필요합니다 lstat
(항상 그런 것은 아니지만 일부 최적화를 수행할 수 있습니다. 참조).이 답변), 파일이 존재해야 합니다.
find
파일이 특정 디렉토리에 있다는 것을 알게 된 후 다른 사람이 파일을 삭제한 경우 lstat
, No such file or directory
귀하의 경우에는 "다른 것"이 또 다른 작업입니다.
파일 시스템이 파일 유형 정보를 디렉토리 항목에 저장하는 경우 상황은 다릅니다. 이는 다른 작업 이 파일을 삭제하는 경우에만 발생할 -ctime
수 있지만 이전에 테스트되었으며 가능한 모든 간섭을 필터링했기 때문에 이런 일은 발생하지 않습니다 .-cmin
No such file or directory
-iname
나는 실제로 이 플래그를 사용하거나 사용하지 않고 생성된 파일 시스템 find
에서 GNU를 테스트했습니다 . 이 플래그가 없으면 파일 시스템은 디렉터리 항목에 파일 형식을 저장하지 않습니다. 다른 프로세스에서 파일이 생성되고 삭제되는 상황을 정리했습니다. 이 파일들은 의도적으로ext4
filetype
아니요일치 -iname
하여 함께 사용하십시오 find
.
filetype
해당 플래그가 없는 파일 시스템에 대한 테스트에서 find
내가 사용 중인 No such file or directory
파일과 일치하지 않는 파일 에 대한 불만이 자주 발생했습니다. -iname
테스트에 불만이 없었습니다 filetype
find
.