LinuxForum.Fans
Тема

Как сделать выполнение inotify-tools с задержкой?

Автор: ushkom 8 сообщений 1302 просмотров
26.10.2020 14:07 #435489

Всем доброго времени суток. С помощью этой статьи: https://www.8host.com/blog/sozdanie-i-ispolzovanie-izobrazhenij-webp-dlya-uskoreniya-sajta/
Я конвертирую свои изображения на сайте в формат .webp. Есть два скрипта которые выполняются по крону:

text
bash /webp-convert.sh /home/admin/web/ 5 2 * * *

text
#!/bin/bash

# converting JPEG images find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.JPG" -o -iname "*.JPEG" \) \ -exec bash -c ' webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0"); if [ ! -f "$webp_path" ]; then cwebp -quiet -q 90 "$0" -o "$webp_path"; fi;' {} \;

# converting PNG images find $1 -type f -and \( -iname "*.png" -o -iname "*.PNG" \) \ -exec bash -c ' webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0"); if [ ! -f "$webp_path" ]; then cwebp -quiet -lossless "$0" -o "$webp_path"; fi;' {} \;

text
bash /webp-watchers.sh /home/admin/web/ 5 3 * * *

text
#!/bin/bash
echo "Настройка часов.";

# watch for any created, moved, or deleted image files inotifywait -q -m -r --format '%e %w%f' -e close_write -e moved_from -e moved_to -e delete $1 \ | grep -i -E '\.(jpe?g|png)$' --line-buffered \ | while read operation path; do webp_path="$(sed 's/\.[^.]*$/.webp/' <<< "$path")"; if [ $operation = "MOVED_FROM" ] || [ $operation = "DELETE" ]; then # если файл перемещен или удален if [ -f "$webp_path" ]; then $(rm -f "$webp_path"); fi; elif [ $operation = "CLOSE_WRITE,CLOSE" ] || [ $operation = "MOVED_TO" ]; then # если создается новый файл if [ $(grep -i '\.png$' <<< "$path") ]; then $(cwebp -quiet -lossless "$path" -o "$webp_path"); else $(cwebp -quiet -q 90 "$path" -o "$webp_path"); fi; fi; done;

Все хорошо работает, но есть одна проблема. Иногда бывает что при загрузки пользователем изображения копия .webp создается битой. Я предполагаю что конвертация происходит до того как изображение полностью загружено, возможно это не так.
Мой вопрос, в чем может быть проблема, и для тестирования, как заставить inotify-tools выполнять с небольшой задержкой, это бы исключило мою теорию. Всем заранее спасибо за помощь.

27.10.2020 06:31 #435492

Добавь задержку перед конвертацией просто.

27.10.2020 12:29 #435494
Vascom написал:
Добавь задержку перед конвертацией просто.

Спасибо за ответ. Я не очень силен в этом, у Вас нет возможности показать на примере как это сделать? Буду очень признателен.

27.10.2020 12:58 #435495

В первом скрипте добавь второй строкой команду (время в секундах)

text
sleep 5
27.10.2020 13:05 #435496
ushkom написал:
[quote=Vascom]Добавь задержку перед конвертацией просто.

Спасибо за ответ. Я не очень силен в этом, у Вас нет возможности показать на примере как это сделать? Буду очень признателен.[/quote]
Таким образом: -exec bash -c sleep 5 ' ?

27.10.2020 13:07 #435497

Нет. Ну во второй скрипт. Именно он же конвертирует, вроде.
Просто:

text
#!/bin/bash

sleep 5

# converting JPEG images find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.JPG" -o -iname "*.JPEG" \) \ -exec bash -c ' webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0"); if [ ! -f "$webp_path" ]; then cwebp -quiet -q 90 "$0" -o "$webp_path"; fi;' {} \;

27.10.2020 13:08 #435498
Vascom написал:
Нет.
Просто:
text
#!/bin/bash

sleep 5

# converting JPEG images find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.JPG" -o -iname "*.JPEG" \) \ -exec bash -c ' webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0"); if [ ! -f "$webp_path" ]; then cwebp -quiet -q 90 "$0" -o "$webp_path"; fi;' {} \;

Спасибо, попробую, все возможно что проблема не в этом.

27.10.2020 13:10 #435499

В чём проблема - не знаю, но задержку вставить так.

Войдите или зарегистрируйтесь, чтобы ответить.