Скрипт для rclone (завантаження файлів за певним сценарієм)Скрипт для rclone (выгрузка файлов по определенному сценарию)
Потрібно написати скрипт для завантаження файлів в хмарочос за сценарієм.- https://rclone.org/commands/ - список доступних команд.- На що писати - на ваш розсуд (python.Будда вважає за краще).Починатимуться за Cron.Потрібно реалізувати функцію, щоб скрипт розумів, що минула сесія ще працює (таким чином, паралельно не витягувати одне і те ж).- Потрібно бути просто підключити будь-який хмару в подальшому, наприклад, Mega, OneDrive, Google Drive, Sia і т.д.Принцип завантаження однаковий всюди: rclone copy source:sourcepath dest:destpath.Облаки підключаються в файлі конфігурації, а потім в команді замінюються шляхи dest:destpath.- Ви повинні виявити нові файли в каталозі $GetFromFolder, а потім перемістити в $MoveFolder (для захисту від перезапису або внесення змін), після завантаження, а потім видалити.- Виявлення нових файлів: потрібно виявити і перемістити для завантаження всі файли, крім найновішого, оскільки програма (яка створює файли) в найновіший файл пише протягом певного часу.І коли з'являється ще один, то означає, що минулий можна забирати на вивантаження.Або можна визначити, що файл більше нічим не використовується для запису, додавши змінну $TimeWithoutChanges і якщо файл не змінився (розмір) протягом зазначеного часу, то вважаємо файл завершеним і готовим до завантаження.- Променна $MaxCloudLimit дозволяє встановити максимальний ліміт хмари.Він може бути менш реалістичним.Потрібно записувати всі завантажені файли та їх розміри.Якщо ліміт перевищений, то видалити найстаріше, щоб достатньо місця для нової завантаження.Команда rclone lsl дозволяє завантажувати з хмари список файлів і їх розміри.Не на всіх хмарах працює, тому, ймовірно, краще записати в файл всі завантаження.- Якщо скрипт залежить (можливо написати в файл час старту і коли час буде більше $FreezeTime, змушено вбивати процес).Виконати перевірку потрібно на початку роботи (тобто, якщо скрипт завіс, то він не зможе самостійно нічого зробити, тому визначити повинна нова сесія, запущена за cron).Ви можете додати .lock файл з датою і часом запуску.- Перед тим, як видалити локально файл і завершити роботу, необхідно обов'язково перевірити наявність файлу в хмарі, наприклад, через rclone lsl.- Якщо файл завантажений успішно, але в каталозі він не виявився (мало чи глюк), то $MoveIfNotFoundAfterUpload = yes/no
Якщо так, то $MoveIfNotFoundTo переміщаємо цей файл, а не видаляємо, повідомляємо на пошту.Якщо хмара розривається, то не підключається і т.д.- повідомлення на пошту, а далі $CrashedCloudSkip=yes/no
Надіслати повідомлення:
- про помилки (письмо: UploadError/мойтекст,писаніручно/назва облака/часа)
- якщо сесія висихає довго (завісно скрипту) (письмо: Freezed/мойтекст,письмовийручно/назва облака/Time)
- якщо довго немає нових файлів ($LongTimeWithoutNewFIles), потрібно на випадку, якщо раптово щось зламалося в скрипті, який створює файли (письмо: NoNewFiles/мойтекст,письмовийручно/назва хмари/Time)
- про успіхи (письмо: SuccessUpload/мойтекст,писаніручно/назва облака/Time)
Зміни в скрипті:
- GetFromFolder = шлях до папки, яку потрібно спостерігати;
-- MoveFolder = шлях до папки, до якої переміщається файл для роботи
-- TimeWithoutChanges = час, після якого вважати файл готовим до завантаження
— CopyTo1=наприклад, OneDrive:folder
— CopyTo2=наприклад, Mega:folder
— CopyTo3=наприклад, GoogleDrive:folder
— CopytoN = *- MaxCloudLimit = максимальний розмір хмари (перемінна повинна бути кожна у своєму хмарі, наприклад CopyTo1 = Google Drive + MaxCloudLimit = 500Gb, а CopyTo2 = OneDrive + MaxCloudLimit = 100Gb і т.д.)— Email = Пошта для повідомлень про помилки
FreezeTime = час, після якого вважати скрипт залежним
-- LongTimeWithoutNewFIles = час, після якого повідомляти, якщо немає нових файлів
-- MoveIfNotFoundAfterUpload=yes/no
-- MoveIfNotFoundTo=дирекція, куди перемістити
-- CrashedCloudSkip = yes-пропустити розбитий хмарочос, no-закінчити роботу скрипта.Якщо ви всі дочитали до цього моменту і не робот, напишіть «я не бот» на початку відповіді.
Добрый день. ЕСЛИ ВОПРОСЫ - ЗАДАВАЙТЕ
Нужно написать скрипт для выгрузки файлов в облака по сценарию.
- https://rclone.org/commands/ - перечень доступных команд.
- На чем писать - на ваше усмотрение (python. bash предпочтительнее).
- Запускаться будет по Cron. Нужно реализовать функцию, чтобы скрипт понимал, что прошлая сессия еще работает (чтобы параллельно не выгружать одно и тоже).
- Должно быть просто подвязать любое облако в дальнейшем, например, Mega, OneDrive, Google Drive, Sia и пр. Принцип выгрузки одинаковый везде: rclone copy source:sourcepath dest:destpath. Облака подключаются в файле конфигурации, а потом в команде заменяются пути dest:destpath.
- Нужно выявлять новые файлы в директории $GetFromFolder, потом перемещать в $MoveFolder (для защиты от перезаписи или внесения изменений), после выгружать, после удалять.
- Выявление новых файлов: нужно выявлять и перемещать для выгрузки все файлы, кроме самого нового, поскольку программа (которая создает файлы) в самый новый файл пишет на протяжении определенного времени. И когда появляется еще один, значит прошлый можно забирать на выгрузку.
Либо можно определять, что файл более не используется ничем для записи, добавив переменную $TimeWithoutChanges и если файл не изменялся (размер) в течение указанного времени, то считаем файл завершенным и готовым к выгрузке.
- Переменная $MaxCloudLimit позволяет задавать максимальный лимит облака. Он может быть меньше реального. Нужно записывать все выгруженные файлы и их размеры. Если лимит превышен, то удалять самое старое, чтобы хватило места на новую выгрузку. Команда rclone lsl позволяет выгрузить из облака список файлов и их размеры. Не на всех облаках работает, поэтому, вероятно, лучше записывать в файл все загрузки.
- Если скрипт завис (вероятно писать в файл время старта и когда время будет больше $FreezeTime, принудительно убивать процесс). Выполнять проверку нужно в начале работы (то есть если скрипт завис, то он не сможет сам ничего сделать, поэтому определять должна новая сессия, запущенная по cron). Можно добавить .lock файл с датой и временем запуска.
- Перед тем, как удалить локально файл и завершить работу, необходимо обязательно проверить наличие файла в облаке, например, через rclone lsl.
- Если файл загружен успешно, но в директории он не оказался (мало ли глюк), то $MoveIfNotFoundAfterUpload = yes/no
Если yes, то $MoveIfNotFoundTo перемещаем этот файл, а не удаляем, сообщаем на почту.
- Если облако сломалось, не подключается и пр. - уведомление на почту, а дальше $CrashedCloudSkip=yes/no
- Отправлять уведомления:
-- об ошибках (письмо: UploadError/мойтекст,написанныйвручную/названиеоблака/время)
-- если сессия висит долго (завис скрипт) (письмо: Freezed/мойтекст,написанныйвручную/названиеоблака/Time)
-- если долго нет новых файлов ($LongTimeWithoutNewFIles), нужно на случай, если вдруг сломалось что-то в скрипте, который создает файлы (письмо: NoNewFiles/мойтекст,написанныйвручную/названиеоблака/Time)
-- об успехах (письмо: SuccessUpload/мойтекст,написанныйвручную/названиеоблака/Time)
- Переменные в скрипте:
-- GetFromFolder=путь до папки, которую нужно мониторить;
-- MoveFolder=путь до папки, в которую перемещается файл для работы
-- TimeWithoutChanges=время, спустя которое считать файл готовым к выгрузке
-- CopyTo1=например, OneDrive:folder
-- CopyTo2=например, Mega:folder
-- CopyTo3=например, GoogleDrive:folder
-- CopytoN=*.
-- MaxCloudLimit=максимальный размер облака (переменная должна быть каждая у своего облака, например CopyTo1=Google Drive + MaxCloudLimit = 500Gb, а CopyTo2=OneDrive + MaxCloudLimit=100Gb и т.д.)
-- Email=почта для уведомлений об ошибках
-- FreezeTime=время, после которого считать скрипт зависшим
-- LongTimeWithoutNewFIles=время, после которого уведомить, если нет новых файлов
-- MoveIfNotFoundAfterUpload=yes/no
-- MoveIfNotFoundTo=директория, куда переместить
-- CrashedCloudSkip = yes-пропустить сломанное облако, no-завершить работу скрипта.
Если вы все дочитали до этого момента и не робот, пишите "я не бот" в начале ответа.
-
ставка прихована замовником
-
нужно создать нормальную админку. просто скрипт не подойдет