rm -rf: não é possível remover '/ opt / jetty': Diretório não vazio

2

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 ...

    
por 夜神ライト 05.05.2015 / 11:14

1 resposta

-3

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/'
    
por 05.05.2015 / 12:33