Para depurar a sessão ssh use a opção "-v" em vez de "-q" e analize a saída.
Tente usar caminhos absolutos no comando remoto. Então, isso parece:
# ssh -v root@hostname /bin/sh -c '/bin/rm -rf /opt/jetty/'
Eu tenho um script usando o seguinte comando para remover uma pasta:
ssh -q root@hostname sh -c 'rm -rf /opt/jetty/'
Na maioria das vezes, funciona bem, mas ocasionalmente recebo esta mensagem:
rm: cannot remove '/opt/jetty': Directory not empty
O único ponto suspeito é que a pasta a ser excluída contém um arquivo de trava que está sendo usado pelo comando shell flock
para adquirir o bloqueio de arquivo. Mas eu tentei remover a pasta manualmente quando o arquivo estava sendo bloqueado por flock
, ele foi bem sucedido.
atualização:
O ambiente é 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 não alias a nada, a saída de rm:
# rm
rm: missing operand
Try 'rm --help' for more information.
Eu tenho um script de serviço para iniciar o Jetty, que cria um bloqueio de arquivo dentro da pasta. Alguns trechos como mostrado abaixo:
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
}
atualização:
Depois que o erro foi reproduzido, descobri que apenas o arquivo jetty_lock ainda permanecia int / opt / jetty, isso significa que flock
impede que o bloqueio de arquivo seja excluído? Não posso fornecer mais detalhes porque não sei quando isso acontecerá da próxima vez ...
Para depurar a sessão ssh use a opção "-v" em vez de "-q" e analize a saída.
Tente usar caminhos absolutos no comando remoto. Então, isso parece:
# ssh -v root@hostname /bin/sh -c '/bin/rm -rf /opt/jetty/'