다음을 사용하여 폴더를 삭제하는 스크립트가 있습니다.
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/'