Como usar o inotifywait de maneira não-bloqueante e enviar os resultados por e-mail?

1

Eu tentei várias vezes testar meu script, mas sem sucesso. Este é o script:

zenity --question --text "my text"
if [ $? -eq 1 ]; then
    zenity --warning --text "my text"
else
    ping -n -c1 192.168.180.112
    # print result (0 se existir)
    echo $?
    if [ $? -eq 0 ]; then
        scp -r ~/Documents/Processo/CONCLUIDO/* [email protected]:/home/posto-ensaios/Documents/Processo
        fileName=$(inotifywait -e moved_from /home/posto-11v/Documents/Processo/CONCLUIDO | sed -r 's/^.*MOVED_FROM(,ISDIR)*\s+(.*)$//g')
        mail -s "$fileName" [email protected] < ~/Documents/personaproject/Programa/scripts/mail.txt
        mv --backup ~/Documents/Processo/CONCLUIDO/* ~/Documents/personaproject/processos_terminados    
        zenity --info --text="my text"
    else
        zenity --warning --text "my text"
    fi
fi

Eu tentei executar com o comando sleep com "pipe" depois de sed e alterar a ordem dos comandos. Ao executar o script no terminal , o problema é que inotify sempre fica esperando por uma ação ...

Eu preciso garantir que os arquivos são copiados, movidos e o $filename é enviado por e-mail ...

Qualquer ajuda?
Obrigado!

    
por DJames 25.06.2012 / 20:12

3 respostas

1

Se você quiser enviar um e-mail sempre que um arquivo for movido do diretório vigiado, será preciso configurar um processo diferente para monitorar isso e enviar o e-mail.

Pelas razões que você acabou de descrever, não importa onde você coloca o comando inotifywait , já que o comando mv não acontece ao mesmo tempo , você não pegar o evento desejado.

Mas se você assistiu o diretório de outro processo, a movimentação ocorre enquanto você assiste e você pode detectar qualquer alteração.

Com base no exemplo anterior , você pode começar com o exemplo de script a seguir.

while true
do
    fileName=$(inotifywait -e moved_from /home/posto-11v/Documents/Processo/CONCLUIDO | sed -r 's/^.*MOVED_FROM(,ISDIR)*\s+(.*)$//g')
    mail -s "$fileName" [email protected] < ~/Documents/personaproject/Programa/scripts/mail.txt
done

Por favor, preencha os detalhes necessários, ele funciona basicamente da mesma forma que no exemplo anterior.

Nota:
Há algumas ressalvas, por exemplo, pode perder alguns movimentos enquanto o e-mail é enviado. Depende da quantidade e frequência de movimentos.

    
por lgarzo 25.06.2012 / 20:56
1

aqui está como é feito agora (script inicial):

zenity --question --text "my text"
if [ $? -eq 1 ]; then
    zenity --warning --text "my text"
else
    ping -n -c1 192.168.180.112
echo $?
if [ $? -eq 0 ]; then
    scp -r ~/Documents/Processo/CONCLUIDO/* [email protected]:/home/posto-ensaios/Documents/Processo
    nohup ~/Documents/personaproject/Programa/scripts/mail.sh &
    sleep 1
    mv --backup ~/Documents/Processo/CONCLUIDO/* ~/Documents/personaproject/processos_terminados    
    zenity --info --text="my text"
else
    zenity --warning --text "my text"
fi
fi

então meu novo script "mail.sh" para monitorar a pasta e enviar o email em separado:

while true
do
    fileName=$(inotifywait -e moved_from /home/posto-11v/Documents/Processo/CONCLUIDO | sed -r 's/^.*MOVED_FROM(,ISDIR)*\s+(.*)$//g')
    mail -s "$fileName" [email protected] < ~/Documents/personaproject/Programa/scripts/mail.txt
done

Como você disse, há algumas ressalvas, se houver mais de um arquivo, apenas um e-mail será enviado com a primeira pasta sobre o assunto. Essa é uma melhoria a ser feita. Embora este seja um script para ser executado pelo usuário, cerca de uma vez por semana e provavelmente com apenas uma pasta.

thks!

    
por DJames 28.06.2012 / 20:35
-1
zenity --warning --text "my text" &

executado como um comando de segundo plano, sem bloqueio

    
por Habeel Mazhar 10.03.2018 / 09:35