Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Скрипт для копирования файлоф хитрый!  (Прочитано 535 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Добре время суток !
Понадобилось написать скриптик один
Суть какая при появлении машинки в сети сервер выполняет скрипт который монтирует ftp и копирует файлы!
Скрипт который должен выполнять копирование написал все работает.
Но вот вопрос пингам , отслеживаю есть ли пк в сети или нет и если есть то выполнить скрипт если нет то нечего не делать.
Вроде все просто пингуем и сравниваем, но вот тут и начинается веселье если он один раз про пинговал и выполнил условия что ПК в сети ,то при повторном ринге допустим через 5 мин если ПК ответил что в сети он еще раз выполнит условия запустит скрипт копирования (( .
Я хотел чтоб он выполнил скрипт копирование 1 раз при первом разе проверки пинга ибо ПК потом из сети пропадает и появляется днем на след день!
Тобиш пока он копирует то по крону еще раз выполнит скрипт и будет наложение 
нашел вот такое решение
#!/bin/sh
FPING="/usr/bin/fping"
WRKDIR="/opt/test_1"
DATE=`/bin/date`
MAILTO="avolon.linux@gmail.com"
for i in `/bin/ls -1 $WRKDIR/hosts`
do
    echo $i
        oldstatus=`cat $WRKDIR/hosts/$i`
        echo $oldstatus
        newstatus=`$FPING  $i | /usr/bin/awk '{ print $3 }'`
        echo     $newstatus
    if [ $oldstatus != $newstatus ]
        then {
         
            /opt/test_1/flash.sh
                 echo $newstatus>$WRKDIR/hosts/$i

        }
        fi
done


Тоесть если в файлики /hosts/192.168.0.152 появится запись alive или unreachable выполняется скрипт  /opt/test_1/flash.sh

Но мне надо чтоб он один раз выполнился когда статус ALIVE а у меня он выполняемся и при unreachable ((( вот как их отделить не знаю ((

Может кто поможет ??

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26080
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #1 : 22 Июнь 2016, 02:01:35 »
Удалить скрипт.
Прописать монтирование в fstab с пометкой _netdev
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #2 : 22 Июнь 2016, 08:37:41 »
Записывайте время последнего копирования(в переменную или создав файл), установите требуемый интервал (например 1 раз в 5 часов) и поставьте проверку/условие в скрипте: время копирования минус время сейчас больше интревал .
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #3 : 29 Июнь 2016, 22:09:00 »
Записывайте время последнего копирования(в переменную или создав файл), установите требуемый интервал (например 1 раз в 5 часов) и поставьте проверку/условие в скрипте: время копирования минус время сейчас больше интревал .
А как получить последне копирование файла и время ??
Вот щас у меня копирование происходит так
С начала пинги
cat ping889.sh
#!/bin/sh
FPING="/usr/bin/fping"
WRKDIR="/opt/tral"
DATE=`/bin/date`
MAILTO="avolon.linux@gmail.com"
for i in `/bin/ls -1 $WRKDIR/889`
do

    echo $i
        oldstatus=`cat $WRKDIR/889/$i`
        echo $oldstatus
        newstatus=`$FPING  $i | /usr/bin/awk '{ print $3 }'`
        echo     $newstatus
    if [ $oldstatus != $newstatus ]
        then {
                echo $newstatus>$WRKDIR/889/$i


         /opt/tral/flash_log.sh
                echo $newstatus>$WRKDIR/889/$i
        }
fi
done

Если появился в сети то выполняем скрипт по копированию
вот:
cat flash.sh

umount  /mnt/192.168.0.152
DAT=`/bin/date`
echo Nachalo v  $DAT

curlftpfs ftp://192.168.0.152/media/sdb/ /mnt/192.168.0.152

SOURCE=`find /mnt/192.168.0.152 -mindepth 1 -maxdepth 1 -type d`


DEST_DIR=/opt/bacula/Videoreg
MOUNTHES="Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь"

find ${SOURCE} -type d | while read DIR
do
   FROM_FLASH=`echo ${DIR} | cut -f3 -d \/`

   find ${DIR} -maxdepth 1 -type f -iname 0*.* -exec stat -c "%y\|%n" {} \; | while read FILE_STR
      do
         MOUNTH_NUM=`echo $FILE_STR | cut -f1 -d" " | cut -f2 -d-`
        MOUNTH=`echo $MOUNTHES | cut -f $MOUNTH_NUM -d" "`
         DAY=`echo $FILE_STR | cut -f1 -d" " |cut -f3 -d-`

         echo $FILE_STR


         DEST=${DEST_DIR}/$MOUNTH\/$DAY\/$FROM_FLASH
         FILE=`echo $FILE_STR | cut -f2 -d\|`
         test -d ${DEST} || mkdir ${DEST} -p
        echo $FILE ${DEST}/

        cp --preserve $FILE ${DEST}/

done
done

 umount  /mnt/192.168.0.152
echo Zakonchiloc v  $DAT




Вот тут и загвоздка что если статус поменяется на недоступность ip то он все ровно выполнит скрипт ((( вот кабы это обойти ((

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #4 : 30 Июнь 2016, 09:15:44 »
Читал-читал — наваяли какую-то обфускацию, надоело. То что Вы делаете выполняется 4-5 командами вместо кучи кода с непонятными переменными:
  • Выполнить проверку доступности через заданный интервал, наличие и дату проверочного файла
  • Провести синхронизацию по сети используя scp/rsync/wget/curl/lftp
  • Проверить успешность и выставить проверочный файл touch-eм
Если сами не справитесь — формулируйте что/куда/по каким условиям, постараемся помочь
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

kononvaler

  • Гость
Re: Скрипт для копирования файлоф хитрый!
« Ответ #5 : 30 Июнь 2016, 11:27:07 »
можно использовать rsync единственной командой из cron,  так как она при отстутствии измененеий не будет ничего копировать, только проверять наличие изменений. Задать например на каждые полчаса, а там даже не важно есть тот комп в сети или нет, как  появится так  и засинхронизируется.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14922
  • Я не слышу.
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #6 : 30 Июнь 2016, 11:46:07 »
Цитировать
/bin/ls
это не работает PATH ?
~.o

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #7 : 30 Июнь 2016, 13:02:13 »
Читал-читал — наваяли какую-то обфускацию, надоело. То что Вы делаете выполняется 4-5 командами вместо кучи кода с непонятными переменными:
  • Выполнить проверку доступности через заданный интервал, наличие и дату проверочного файла
  • Провести синхронизацию по сети используя scp/rsync/wget/curl/lftp
  • Проверить успешность и выставить проверочный файл touch-eм
Если сами не справитесь — формулируйте что/куда/по каким условиям, постараемся помочь
Доброе время суток!
Задача стоит вот какая
На Камазе стоит роутер к непу подключен регистртор с флешкой!
Так вот когда машина заезжает в гараж мне надо чтобы запись скидывалась (месяц/день/(номер машины) )) ну и потом удалить с регистратора файлы
(файлы находятся на регистраторе /media/sda1/889(номер машины)/vidodata)
На видео регистраторе поднят тока FTP по этому такие и заморочки (((
Если еще както можно сделать подскажите??
« Последнее редактирование: 30 Июнь 2016, 13:07:03 от Avolon »

kononvaler

  • Гость
Re: Скрипт для копирования файлоф хитрый!
« Ответ #8 : 30 Июнь 2016, 13:26:09 »
Что за регистратор с вайфаем и sda1 ?
в rsync есть опция удалять с соурса файлы после успешного бэкапа.
например http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-rsync-delete-file-after-transfer/

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #9 : 30 Июнь 2016, 13:53:22 »
Что за регистратор с вайфаем и sda1 ?
в rsync есть опция удалять с соурса файлы после успешного бэкапа.
например http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-rsync-delete-file-after-transfer/
там тплинк 320 и регистратор tral на линухах в одной коробочке)

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #10 : 30 Июнь 2016, 14:23:38 »
Код: Bash
  1. while ! rsync -r --remove-source-files \
  2.     ftp://192.168.0.152//media/sda1/889(номер машины)/vidodata/ \
  3.     /opt/bacula/Videoreg/$(date +'%m/%0d/(номер машины)/')
  4. do
  5.     sleep 600
  6. done
и ставите в cron на каждый день.
« Последнее редактирование: 30 Июнь 2016, 14:37:24 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #11 : 30 Июнь 2016, 18:37:54 »
Код: Bash
  1. while ! rsync -r --remove-source-files \
  2.     ftp://192.168.0.152//media/sda1/889(номер машины)/vidodata/ \
  3.     /opt/bacula/Videoreg/$(date +'%m/%0d/(номер машины)/')
  4. do
  5.     sleep 600
  6. done
и ставите в cron на каждый день.
спасибо
Попробую
Но Забыл еще сказать что мой скрипт смотрит дату создание файла и кидает в папку соответствующей даты
Тоесть если файл на регистраторе создался 26.06.2016  то файл должен скопироваться в /opt/bacula/Videoreg/Июнь/26/889(номер машины))
Так как файл могуд создоваться с 26 на 27 июня както так
В вашем случае я так понял он берет дату когда запущен скрипт  так или я не прав ??

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #12 : 30 Июнь 2016, 22:01:36 »
А самостоятельно уже дальше, не?
Код: Bash
  1. cd /opt/bacula/Videoreg/
  2. while ! rsync -r --remove-source-files \
  3.         ftp://192.168.0.152//media/sda1/889(номер машины)/vidodata/ ./
  4. do
  5.     sleep 600
  6. done
  7. for file in *.jpg
  8. do
  9.     date_path=$(date --reference="$file" +'%B/%0d/889(номер машины)/')
  10.     [ -d "$date_path" ] || mkdir -p "$date_path"
  11.     mv "$file" "$date_path"
  12. done
« Последнее редактирование: 30 Июнь 2016, 22:04:05 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26080
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #13 : 30 Июнь 2016, 22:10:03 »
Да похрен на дату. Синхронизировать корневой каталог, удалять все каталоги, кроме последнего.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Avolon

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
    • Просмотр профиля
Re: Скрипт для копирования файлоф хитрый!
« Ответ #14 : 30 Июнь 2016, 22:55:43 »
спасибо всем буду пробывать!

 

Страница сгенерирована за 0.079 секунд. Запросов: 24.