rm -rf: `/opt/jetty'를 삭제할 수 없습니다. 디렉토리가 비어 있지 않습니다.

rm -rf: `/opt/jetty'를 삭제할 수 없습니다. 디렉토리가 비어 있지 않습니다.

다음을 사용하여 폴더를 삭제하는 스크립트가 있습니다.

ssh -q root@hostname sh -c 'rm -rf /opt/jetty/'

대부분의 경우에는 잘 작동하지만 가끔 다음과 같은 메시지가 나타납니다.

rm: `/opt/jetty'를 삭제할 수 없습니다. 디렉토리가 비어 있지 않습니다.

유일한 의심스러운 점은 삭제할 폴더에 flock파일 잠금을 얻기 위해 쉘 명령에서 사용되는 잠금 파일이 포함되어 있다는 것입니다. 하지만 파일이 잠겨 있는 동안 폴더를 수동으로 삭제하려고 시도했는데 flock작동했습니다.

고쳐 쓰다:


환경은 리눅스입니다

# uname -a
Linux XXX 2.6.32-504.8.1.el6.x86_64 #1 SMP Fri Dec 19 12:09:25 EST 2014 x86_64 x86_64 x86_64 GNU/Linux

rm은 별칭을 지정하지 않으며 rm의 출력은 다음과 같습니다.

# rm
rm: missing operand
Try `rm --help' for more information.

Jetty를 시작하고 폴더 내에 파일 잠금을 생성하는 서비스 스크립트가 있습니다. 일부 스니펫은 다음과 같습니다.

JETTY_LOCK=/opt/jetty/jetty_lock

start(){
    #open file descriptor and acquire lock
    exec 200>$JETTY_LOCK
    flock -x -n 200 || { exec 200>&-;echo 'jetty is being started by another process.'; sleep 5; exit 0; }
    ...
    cd /opt/jetty/
   ...
    echo $!>&200
    fi
    flock -u 200  #release lock
    exec 200>&-   #close file descriptor
}

고쳐 쓰다:


오류가 다시 나타난 후 int /opt/jetty에 jetty_lock 파일만 남아 있는 것을 발견했습니다. 이는 flock파일 잠금이 삭제되지 않는다는 의미입니까? 다음은 언제가 될지 모르기 때문에 자세한 내용은 말씀드릴 수 없습니다...

답변1

SSH 세션을 디버깅하려면 "-q" 대신 "-v" 옵션을 사용하고 출력을 분석하세요.

원격 명령에 절대 경로를 사용해 보십시오. 그래서 이것은 다음과 같습니다:

# ssh -v root@hostname/bin/sh -c '/bin/rm -rf /opt/jetty/'

관련 정보