Como gerenciar “dispositivo ou recurso ocupado” em um script?

0

Eu tenho um pequeno script que tem que remover alguns arquivos. Como posso gerenciar o erro device or resource busy de rm ? Posso pegar? Como uma tentativa / captura? Então, se eu pegá-lo, por exemplo, durmo 3 segundos e depois repito ..

Obrigado

    
por Cirelli94 14.06.2017 / 14:29

2 respostas

0

Se for um erro que você acha que desaparecerá depois de algum tempo, tente um loop simples:

while ! rm some files; do
    echo 'rm failed, sleeping for 5 seconds'
    sleep 5
    echo 'retrying...'
done
    
por 14.06.2017 / 14:35
0

Se você quiser detectar esse erro específico, tente sondar o código de erro 16 na última execução de rm . Exemplo:

rm /path/to/foo
if [ $? -eq 16 ]; then
    echo "Device busy"
fi

$? é a variável de shell especial que significa "estado de saída do último comando". Se esse estado for zero 0 , significa que o último comando foi bem-sucedido e, se diferente de zero, significa falha e é mapeado para uma mensagem de erro. Todas as mensagens de erro estão disponíveis no arquivo de origem do Linux linux/include/uapi/asm-generic/errno-base.h e 16 é:

#define EBUSY       16  /* Device or resource busy */

Se você quiser lidar com o processo que está causando o erro de arquivo aberto, lsof +D /path/too/foo/ mostrará quais arquivos estão abertos dentro desse diretório. lsof(8) manpage.

Material relacionado:

por 14.06.2017 / 14:39