Primeiro, se você excluir uma pasta que inotifywait
esteja assistindo, então, sim, ela não será mais assistida. A maneira mais óbvia é simplesmente monitorar o diretório um nível acima (você pode até mesmo criar um diretório para monitorar especialmente e colocar seu work_folder
lá.
No entanto, isso não funcionará se você tiver uma pasta abaixo da qual é desmontada / remontada em vez de excluída / recriada, os dois são processos muito diferentes. Não tenho idéia se usar algo diferente de inotifywait
é a melhor coisa, já que não tenho ideia do que você está tentando alcançar monitorando o diretório. No entanto, talvez a melhor coisa a fazer seja configurar uma regra udev
para chamar como script que monta o pendrive e inicia o processo inotifywait
quando ele está conectado e outro para interrompê-lo novamente quando estiver desconectado.
Você colocaria as regras udev
em um arquivo .rules no diretório /etc/udev/rules.d '. As regras seriam parecidas com:
ENV{ID_SERIAL}=="dev_id_serial", ACTION=="add", \
RUN+="/path/to/script add '%E{DEVNAME}'"
ENV{ID_SERIAL}=="dev_id_serial", ACTION=="remove", \
RUN+="/path/to/script remove '%E{DEVNAME}'"
Em que ID_SERIAL
do dispositivo pode ser determinado por:
udevadm info --name=/path/to/device --query=property
com o script algo como:
#!/bin/sh
pid_file=/var/run/script_name.pid
out_file=/var/log/script_name.log
# try to kill previous process even with add in case something
# went wrong with last remove
if [ "$1" = add ] || [ "$1" = remove ]; then
pid=$(cat "$pid_file")
[ "$(ps -p "$pid" -o comm=)" = inotifywait ] && kill "$pid"
fi
if [ "$1" = add ]; then
/bin/mount "$2" /home/oshiro/Desktop/work_folder
/usr/bin/inotifywait -m -r /home/oshiro/Desktop/work_folder \
</dev/null >"$out_file" 2>&1 &
echo $! >"$pid_file"
fi
Além disso, certifique-se de que a montagem por meio da regra udev
não entre em conflito com outro processo que pode tentar montar automaticamente o disco quando ele estiver conectado.