Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.11.2017, 19:59   #1
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
Post Пишем скрипт

Лирическое :

Развернуть для просмотра

Незатейливо так тему обозвал.
Данная тема по сути тоже: http://cyber-place.ru/showthread.php?t=2642
Но имхо лучше в кучу собирать, на готовых примерах проще сделать свой
[свернуть]


Имеется проблема - нужно мониторить файлы *.avi (30сек) создаваемые motion+ffmpeg.

При смене освещенности, долгой тусовки индивидумов и прочее - бывает motion пишет все подряд, что нагружает железо.

Нужно, запускать раз в минуту кроном скрипт, который будет мониторить текущую папку записи.
Если он увидит имена файлов подряд скажем 5 минут (10 роликов по 30 секунд), задача скрипта остановить запись.


Как это выглядит:


Имеются скрипты:
- сортировка:

Развернуть для просмотра

Код:
#!/bin/sh

SRC_DIR="/mnt/sda№/a"
DST_DIR="/mnt/sda№/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H)"

for F in ${SRC_DIR}/*; do
	SUB=$(date -d"$(stat -c%y "${F}")" +%Y%m%d)
	mkdir -p "${DST_DIR}/${SUB}"
	mv "${F}" "${DST_DIR}/${SUB}/"
done
[свернуть]

- удаление старых папок:

Развернуть для просмотра

Код:
#!/bin/sh

if [ $(df /mnt/sda№ | sed 's/.* \([0-9]\+\)%.*/\1/;$!d') -gt 80 ]

then
	cd /mnt/sda№/ && ls -t | tail -n 2 | grep -v lost+found | xargs rm -rf $b

else
	echo 'NOT DELETE'
fi
[свернуть]


===

Хотелось бы услышать светлые мысли Dioptimizer и paulerr
Спасибо !
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 03.11.2017 в 20:04.
sunny вне форума   Ответить с цитированием
Старый 06.11.2017, 12:15   #2
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию

Состряпал, монтирование и сами можете прикрутить.
Скрипт удаляет файлы заданного размера(равное и меньше) size и при условии если дата создания файлов в заданном интервале(равное и меньше) seconds.

Развернуть для просмотра


Код:
#!/bin/sh

path=/mnt/*
seconds=60      #Interval between files in seconds
size=1048576    #Size of files(equal or less) in bytes for example 1048576 = 1Mbyte

for file in $path
do
  size1=`wc -c $file | cut -d' ' -f1`
  if [[ -f $file -a "$size1" -le "$size" ]]
  then
    file_to_remove=
    for file2 in $path
    do
      size2=`wc -c $file2 | cut -d' ' -f1`
      if [[ -f $file2 -a "$size2" -le "$size" ]]
      then
        if [[ $file != $file2 ]]
        then
          date1=`date -r $file +%s`
          date2=`date -r $file2 +%s`
          if [[ $date1 -gt $date2 ]]
          then
            if [[ $(($date1-$date2)) -le $seconds ]]
            then
              rm $file2
              file_to_remove=$file
            fi
          else
            if [[ $(($date2-$date1)) -le $seconds ]]
            then
              rm $file2
              file_to_remove=$file
            fi
          fi
        fi
     fi
    done
  if [[ -n "$file_to_remove" ]]
  then
    rm $file_to_remove
  fi
  fi
done
[свернуть]

Быстро протестил, функционально работает, будут ошибки, сообщите.
Но Вы протестируйте на тестовых файлах, прежде чем применять на реальной машине, мало ли....

Последний раз редактировалось Dioptimizer; 06.11.2017 в 13:47.
Dioptimizer вне форума   Ответить с цитированием
Старый 06.11.2017, 14:36   #3
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

Dioptimizer

Вы уникальны Огромадное спасибо!
Цитата:
Вы протестируйте на тестовых файлах, прежде чем применять на реальной машине, мало ли....
Косяки со скриптами у меня уже были (оттачивал в процессе эксплуатации), спасибо...
Объект "не режимный" - так что, можно смело экспериментировать..
__________________
Читаю ваши мысли по аватару ...
sunny вне форума   Ответить с цитированием
Старый 10.11.2017, 01:59   #4
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

Никак пока не разберусь.
Остановился на этом:
Код:
/usr/bin/script: line 45: cut: not found
/usr/bin/script: line 45: wc: not found
sh: out of range
Вроде отработал, но файлы все на месте..
Дошло , очевидно отрабатывает по времени, а не по имени файла.
Я копировал старые файлы с именем через 30 секунд подряд в дежурную папку - a и запускал скрипт - пытаясь его проверить...

Заменил, шапка:
Код:
PATH=/mnt/sda3/имя_дежурной папки

seconds=30
size=13631488

for file in $PATH
do
  size1=`wc -c $file | cut -d' ' -f1`
  if [[ -f $file -a "$size1" -le "$size" ]]
  then
    file_to_remove=
    for file2 in $PATH
===

Нет, не работает все на месте..
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 10.11.2017 в 13:06.
sunny вне форума   Ответить с цитированием
Старый 10.11.2017, 13:00   #5
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию

Странно, писал для OpenWRT, проверил еще на Ubuntu
(но для Ubuntu пришлось двойные скобки убирать [[ => [ и т.д..,)
У Вас в PATH указана маска * ?
Dioptimizer вне форума   Ответить с цитированием
Старый 10.11.2017, 13:00   #6
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

У меня LEDE

Код:
PATH=/mnt/sda3/a - у меня так
path - такое написание замучило ошибками на разных строках где '

45 строка - это done (последняя строка скрипта)

Нашел где-то, что кавычки внутри -d' ' при присвоении значения переменной не учитываются - `wc -c $file2 | cut -d' ' -f1`
Может здесь чего ?

===

Поясняю еще, вдруг..
/mnt/sda3/a - дежурная папка, motion пишет постоянно туда, каждые 15 минут через cron этот скрипт - сортировка(первый пост) создает часовую папку и перемещает данные туда.
Т.е. работать желательно с папкой - а (хотя...)
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 10.11.2017 в 13:23.
sunny вне форума   Ответить с цитированием
Старый 10.11.2017, 13:19   #7
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от sunny Посмотреть сообщение
#PATH=/mnt/sda3/a - у меня так
path - такое написание замучило ошибками на разных строках где '

45 строка - это done (последняя строка скрипта)

Нашел где-то, что кавычки внутри -d' ' при присвоении значения переменной не учитываются - `wc -c $file2 | cut -d' ' -f1`
Может здесь чего ?

===

Поясняю еще , вдруг..
/mnt/sda3/a - дежурная папка, motion пишет постоянно туда, каждые 15 минут через cron этот скрипт - сортировка(первый пост) создает часовую папку и перемещает данные туда.
То не двойные кавычки, а отдельный символ "`" - возле буквы Ё
У Вас не указана маска файлов. Для for нужно как минимум два файла.

То же самое что

Код:
xubuntu@xubuntu:~$ ls ~/D
ls: cannot access '/home/xubuntu/D': No such file or directory
xubuntu@xubuntu:~$
xubuntu@xubuntu:~$ ls ~/D*
/home/xubuntu/Desktop:
chromium-browser.desktop
default_iw_list.txt
exo-file-manager.desktop
new_iw_list.txt
normal_boot_with_spi0.1_kernel_4_9.txt
normal_boot_with_spi0.1.txt
[OpenWrt-Devel] [PATCH 1_5] SPI: Also store ioc_base on inactive_.desktop
ubiquity.desktop

/home/xubuntu/Documents:

/home/xubuntu/Downloads:
lede-17.01.4-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin
lede-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin
Making density maps using Gnuplot - WikiGagneLague_files
Making density maps using Gnuplot - WikiGagneLague.html
xubuntu@xubuntu:~$
[свернуть]
Dioptimizer вне форума   Ответить с цитированием
Старый 10.11.2017, 13:27   #8
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

Сделал так:
Код:
PATH=/mnt/sda3/*
Получил:
Код:
sh /usr/bin/p
/usr/bin/p: line 45: cut: not found
/usr/bin/p: line 45: wc: not found
sh: out of range
/usr/bin/p: line 45: /usr/bin/p: cut: not found
line 45: wc: not found
sh: out of range
/usr/bin/p: line 45: cut: not found
/usr/bin/p: line 45: wc: not found
sh: out of range
/usr/bin/p: line 45: cut: not found
/usr/bin/p: line 45: wc: not found
sh: out of range
/usr/bin/p: /usr/bin/p: line 45: wc: not found
line 45: cut: not found
sh: out of range
У меня при монтирован еще sda№ раздел с личными данными.

===

Ага ничего не понял про маску файлов - пошел штудировать...)))
А-а-а, "Семен Семенович"... попробую спасибо большое..
Код:
PATH=/mnt/sda3/a*
Нет не работает, тоже самое если path
wc: /mnt/sda3: Is a directory

Код:
PATH=/mnt/sda3/a*
Код:
sh /usr/bin/p
/usr/bin/p: /usr/bin/p: line 45: cut: not found
line 45: wc: not found
sh: out of range
===

Возможно fi там лишние имеются - вроде нет, может done не хватает...
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 10.11.2017 в 13:49.
sunny вне форума   Ответить с цитированием
Старый 10.11.2017, 13:55   #9
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от sunny Посмотреть сообщение
У меня LEDE

/usr/bin/p: line 45: cut: not found
/usr/bin/p: line 45: wc: not found
А у Вас сами стандартные программки wc и cut установлены?

Добился такой же ошибки если изменить название:
Код:
./script.sh: 1: ./script.sh: cut_: not found
./script.sh: 1: ./script.sh: wc_: not found
Dioptimizer вне форума   Ответить с цитированием
Старый 10.11.2017, 13:55   #10
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию

Еще у ash date специфический не как у bash (замучил он меня, когда предыдущие скрипты подгонял)

Цитата:
wc и cut установлены?
Да

Цитата:
изменить название:
Название чего не понял

Пожалуй здесь проблема:
Код:
          date1=`date -r $file +%s`
          date2=`date -r $file2 +%s`
===

Может пакет bash поставить, чтобы не мучиться ?
__________________
Читаю ваши мысли по аватару ...

Последний раз редактировалось sunny; 10.11.2017 в 14:41.
sunny вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:16. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика