rm -rf:无法删除`/opt/jetty':目录不为空

rm -rf:无法删除`/opt/jetty':目录不为空

我有一个使用以下命令删除文件夹的脚本:

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

大多数时候它工作正常,但偶尔我会收到以下消息:

rm:无法删除`/opt/jetty':目录不为空

唯一的可疑点是要删除的文件夹包含一个锁定文件,shell 命令正在使用该文件flock来获取文件锁定。但我尝试在文件被锁定时手动删除该文件夹flock,它成功了。

更新:


环境是Linux

# 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 会话,请使用“-v”选项而不是“-q”并分析输出。

尝试在远程命令中使用绝对路径。所以这看起来像:

# ssh -v root@主机名 /bin/sh -c '/bin/rm -rf /opt/jetty/'

相关内容