스크립트에서 core_pattern의 일부로 실행하면 Xargs rm이 작동하지 않습니다.

스크립트에서 core_pattern의 일부로 실행하면 Xargs rm이 작동하지 않습니다.

모든 코어 덤프에서 호출되는 정리 스크립트를 실행하려고 합니다. 먼저 코어 파일의 내용을 다른 파일에 쓴 다음 가장 오래된 파일 10개를 정리해 보았습니다.

그러나 xargs rm이 명령은 core_dump를 통해 스크립트를 호출할 때 작동하지 않습니다. 스크립트를 단독으로 실행하면 rm이 작동합니다.

/proc/sys/kernel/core_pattern:

|core_cleanup.sh /tmp/cores/core.%t

.sh 파일 정리

#!/bin/sh 
cat > "$1"
ls -tr /tmp/cores/ | head -10 | xargs rm

파일을 삭제하기 위해 다음을 수행하면 작동합니다. 하지만 가장 오래된 x 파일만 삭제하면 됩니다.

#!/bin/sh 
cat > "$1"
rm /tmp/cores

누군가 이것에 대해 밝힐 수 있습니까?

답변1

ls -tr /tmp/cores파일의 전체 경로는 나열되지 않고 기본 이름만 나열됩니다.

시도 ls -tr /tmp/cores/* | ...해봐.

그러나 그 모든 것이 필요하지는 않습니다. 모든 파일 이름이 이 형식 core.%t( %t= unix 덤프 시간)이므로 간단히 glob을 사용하여 정렬할 수 있습니다. 또한 파일 하나만 추가한 후 파일 10개를 삭제하는 것은 의미가 없습니다. 일련의 단계를 거치면 디렉터리에 더 이상 파일이 없게 됩니다.

#! /bin/sh
cat > "$1"
# remove the oldest file if there are more than 100 
cleanup(){ test "$#" -gt 100 && rm "$1" }
cleanup /tmp/cores/*

관련 정보