Как использовать inotifywait неблокирующим способом и отправить результаты по почте?

Я несколько раз пытался протестировать свой сценарий, но безуспешно. Это сценарий:

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/* posto-ensaios@192.168.180.112:/home/posto-ensaios/Documents/Processo
        fileName=$(inotifywait -e moved_from /home/posto-11v/Documents/Processo/CONCLUIDO | sed -r 's/^.*MOVED_FROM(,ISDIR)*\s+(.*)$/\2/g')
        mail -s "$fileName" USER@MAIL.HOST < ~/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

Я пытался запустить команду sleep с «pipe» после sed и изменить порядок команд. При запуске сценария в их терминале проблема заключается в том, что inotify всегда продолжает ждать действия ...

Я должен гарантировать, что файлы скопированы, перемещены и $filename отправлено по электронной почте ...

Любая помощь?
Спасибо!

1
задан 25 June 2012 в 22:27

3 ответа

zenity --warning --text "my text" &

запустить в качестве фоновой команды, не блокируя

0
ответ дан 25 June 2012 в 22:27

вот то, как это сделано теперь (первоначальный сценарий):

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/* posto-ensaios@192.168.180.112:/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

затем мой новый "mail.sh" сценарий, чтобы контролировать папку и послать электронное письмо в отдельном:

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

Как Вы сказал, существуют некоторые протесты, если существует больше чем один файл, только одно электронное письмо послано с первой папкой на предмете. Это - улучшение, которое будет сделано. Хотя это - сценарий, который будет выполняться пользователем, об один раз в неделю и вероятно с только с одной папкой.

thks!

1
ответ дан 25 June 2012 в 22:27

Если вы хотите отправлять почту каждый раз, когда файл перемещается из просматриваемого каталога, вам нужно настроить другой процесс , отслеживая это и отправляя почту.

По причинам, которые вы только что описали, не имеет значения, куда вы положили команду inotifywait, поскольку команда mv не происходит одновременно , вы не поймаете необходимое событие.

Но если вы просматривали каталог из другого процесса, перемещение происходит во время просмотра, и вы можете обнаружить любые изменения.

Основываясь на предыдущем примере , вы можете начать со следующего примера сценария.

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

Пожалуйста, заполните необходимые данные, они работают в основном так же, как и в предыдущем примере.

Примечание:
Есть несколько предостережений, например, он может пропустить некоторые шаги во время отправки почты. Это зависит от количества и частоты ходов.

0
ответ дан 25 June 2012 в 22:27

Другие вопросы по тегам:

Похожие вопросы: