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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Задание cron для создания gzip архива ежесуточно из входящих файлов  (Прочитано 1348 раз)

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

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
Купил себе китайскую IP камеру C7824WIP на алиэкспресс. Все-то хорошо, но есть такой неприятный момент. Она умеет писать скриншоты на ftp только напрямую в корень (т.е. в домашнюю папку пользователя) без какой либо сортировки по папкам. В итоге, для начала, пришлось на своем VPS сервере в vsftpd пожертвовать безопасностью и добавить опцию allow_writeable_chroot=YES, чтобы дать права на запись в корень.
Теперь, чтобы как-то упорядочить сотни-тысячи jpg файлов пришедших за день, пришла такая мысль >> прописать задание в cron так чтобы, например каждую ночь в 23:50 система архивировала все jpg файлы в папке в gzip файл с именем содержащим текущую дату, а затем удаляла все jpg файлы оставляя на сервере только архивный файл.
Догадываюсь что тут можно обойтись двумя строчками кода для записи в cron, но знаний пока не хватает, помогите составить задание.

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4309
  • Capture the truth
    • Просмотр профиля
Примерно так)

Создайте файл с текстом:
#!/bin/bash
cd /путь_к_каталогу_с_jpg
tar -czf /путь_к_архиву/$(date +%Y-%m-%d).tar.gz *.jpg
rm /путь_к_каталогу_с_jpg/*.jpg


Сделайте файл исполняемым
chmod +x /путь_к_скрипту
Добавьте запись в кронтаб
crontab -e
Записать:
50 23 * * * /путь_к_скрипту
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
Сделал. Пока не работает. Как посмотреть логи работы cron? Имеет ли значение кто владелец папки в которой лежат файлы для обработки, а также права на них?
По отдельности команды из файла скрипта выполнил в командной строке для проверки. Все работает, только требует права sudo.

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
требует права sudo.
Тогда добавьте в админский cronsudo crontab -e
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Пока не работает
И не заработает потому что у крона свое нестандартное урезанное окружение
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 09 Июнь 2017, 10:56:01 от renzrv »

Оффлайн gamayun

  • Активист
  • *
  • Сообщений: 823
  • Кто ищет, тот найдёт, может быть...
    • Просмотр профиля
только напрямую в корень (т.е. в домашнюю папку пользователя)
Непонятно:в корень?Или home? Разница ведь есть..Если в корень,то камера от root пишет?
Не бери в голову

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
Непонятно:в корень?Или home? Разница ведь есть..Если в корень,то камера от root пишет?
В корень домашней папки пользователя. В моем случае /home/camera

Пользователь добавил сообщение 09 Июнь 2017, 15:20:11:
Тогда добавьте в админский cron
Добавил задание через sudo, все заработало. Благодарю!

Теперь получается ежедневно формируется новый архивный файл и соответственно эти файлы будут накапливаться со временем и их придется удалять вручную, а это быстро надоест. Как бы теперь добавить такое задание, чтобы в папке хранилось только 7 последних архивов, а остальные автоматом удалялись по мере появление новых? :-\
« Последнее редактирование: 09 Июнь 2017, 15:20:11 от Andrey_bk »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Как насчет 1 добавили, 1 удалили? А такls *.tar.gz | head -n -7 | xargs -d '\n' rm
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
Хотелось бы для себя разъяснить эту строку:
ls *.tar.gz | head -n -7 | xargs -d '\n' rm
ls *.tar.gz это понятно - выводим список файлов
head -n -7 здесь выводим файлы из списка за исключением первых 7-ми файлов-?
xargs -d '\n' тут ключом -d подставляем в команду rm n файлов из предыдущей строки или что? Поправьте где не прав.

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
файлы из списка за исключением первых 7-ми файлов
за исключением последних 7-ми файлов
ключом -d
Гораздо быстрее посмотреть --help | man команды…
Код: HTML5
  1. --delimiter=delim
  2.  -d delim
  3.     Input items are terminated by the specified character.  Quotes and backslash are not special; every character
  4.     in the input is taken literally.  Disables the end-of-file string, which is treated like any other  argument.
  5.     This can be used when the input consists of simply newline-separated items, although it is almost always bet‐
  6.     ter to design your program to use --null where this is possible.  The specified delimiter  may  be  a  single
  7.     character, a C-style character escape such as \n, or an octal or hexadecimal escape code.  Octal and hexadec‐
  8.     imal escape codes are understood as for the printf command.   Multibyte characters are not supported.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
ls *.tar.gz | head -n -7 | xargs -d '\n' rm
Попробовал, все работает, только сортирует файлы он не по дате создания а по имени файла

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6015
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
сортирует файлы он не по дате создания а по имени файла
Насколько я понял, то в имени есть дата
tar -czf /путь_к_архиву/$(date +%Y-%m-%d).tar.gz *.jpg
Если уж сильно надо то ls --sort=time *.tar.gz | tail -n +8 | xargs -d '\n' rm
P.S. Настолько простые доработки пробуйте делать самостоятельно, Вас не будут «водить за ручку», зачастую дается только общее направление
« Последнее редактирование: 09 Июнь 2017, 21:08:40 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Andrey_bk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Архитектурная мастерская
P.S. Настолько простые доработки пробуйте делать самостоятельно, Вас не будут «водить за ручку», зачастую дается только общее направление
Понятное дело. Благодарю за помощь. Пойду читать букварь=)

 

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