Я несколько раз пытался протестировать свой сценарий, но безуспешно. Это сценарий:
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
отправлено по электронной почте ...
Любая помощь?
Спасибо!
zenity --warning --text "my text" &
запустить в качестве фоновой команды, не блокируя
вот то, как это сделано теперь (первоначальный сценарий):
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!
Если вы хотите отправлять почту каждый раз, когда файл перемещается из просматриваемого каталога, вам нужно настроить другой процесс , отслеживая это и отправляя почту.
По причинам, которые вы только что описали, не имеет значения, куда вы положили команду 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
Пожалуйста, заполните необходимые данные, они работают в основном так же, как и в предыдущем примере.
Примечание:
Есть несколько предостережений, например, он может пропустить некоторые шаги во время отправки почты. Это зависит от количества и частоты ходов.