我有一个使用以下命令删除文件夹的脚本:
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/'