Я хотел регулярно создавать резервные копии моих календарей Owncloud в виде файлов ICS на случай, если на сервере возникнет проблема, которую я не могу сразу исправить. Для этого я написал небольшой скрипт, который можно запустить как cronjob.

Любые отзывы, улучшения, переделки приветствуются!

0
Envyrus 28 Май 2017 в 12:28

2 ответа

Лучший ответ

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я создал этот скрипт для небольшого экземпляра Owncloud, который я запускаю для себя и 1-2 других друзей - он не предназначен для какого-либо "серьезного бизнеса", так сказать. Я использовал сценарии из этого и этот сайт в качестве отправной точки - спасибо!

Для создания резервных копий ics всех пользовательских календарей я создал пользователя Owncloud с именем calendarBackup, с которым другие пользователи могут делиться своими календарями. Я написал небольшой скрипт, который просматривает все эти календари и загружает файлы ics. Затем они помещаются в общую папку, принадлежащую calendarBackup, и резервная копия распределяется между пользователями. (Можно выполнить простую настройку, чтобы каждый пользователь получал свои собственные файлы календаря.)

Преимущество такого подхода заключается в том, что сценарию не нужно знать все пароли пользователей.

Вот код:

#!/bin/bash

#owncloud login data for calendar backup user
OCuser=owncloudUserName
OCpassword="owncloudUserPassword"
OCpath="/var/www/owncloud/"
OCbaseURL="https://localhost/owncloud/"
OCdatabase="owncloudDatabaseName"

#destination folder for calendar backups
dest="/var/www/owncloud/data/owncloudUserName/files/Backup/"

#mysql user data with access to owncloud database
MSQLuser=owncloudMysqlUser
MSQLpassword="owncloudMysqlUserPassword"

#timestamp used as backup name
timeStamp=$(date +%Y%m%d%H%M%S)
archivePassword="passwordForArchivedCalendars"

#apachee user and group
apacheUser="apacheUser"
apacheGroup="apacheGroup"

#create folder for new backup files
mkdir "$dest$timeStamp"

#create array of calendar names from Owncloud database query
calendars=($(mysql -B -N -u $MSQLuser -p$MSQLpassword -e "SELECT uri FROM $OCdatabase.oc_calendars"))
calendarCount=${#calendars[@]}

#create array of calendar owners from Owncloud database query
owners=($(mysql -B -N -u $MSQLuser -p$MSQLpassword -e "SELECT principaluri FROM $OCdatabase.oc_calendars"))


loopCount=0

#loop through all calendars
while [ $loopCount -lt $calendarCount ]
do
    #see if owner starts with "principals/users/"
    #(this part of the script assumes that principaluri for normal users looks like this: principal/users/USERNAME )
    if [ "${owners[$loopCount]:0:17}" = "principals/users/" ]
    then
        #concatenate download url
        url=$OCbaseURL"remote.php/dav/calendars/$OCuser/${calendars[$loopCount]}_shared_by_${owners[$loopCount]:17}?export"

        #echo $url

        #download the ics files (if download fails, delete file)
        wget \
        --output-document="$dest$timeStamp/${owners[$loopCount]:17}${calendars[$loopCount]}.ics" \
        --no-check-certificate --auth-no-challenge \
        --http-user=$OCuser --http-password="$OCpassword" \
        "$url" || rm "$dest$timeStamp/${owners[$loopCount]:17}${calendars[$loopCount]}.ics"

        #echo ${owners[$loopCount]:17}
    fi
    #echo "${calendars[$loopCount]} ${owners[$loopCount]}" 
    loopCount=$(($loopCount + 1))
done

#zip backed up ics files and remove the folder (this could easily be left out, change the chown command though)
zip -r -m -j -P $archivePassword "$dest$timeStamp" "$dest$timeStamp"
rm -R $dest$timeStamp
#chown needed so owncloud can access backup file
chown $apacheUser:$apacheGroup "$dest$timeStamp.zip"

#update owncloud database of calendar backup user
sudo -u $apacheUser php "$OCpath"occ files:scan $OCuser

Несколько замечаний по сценарию:

  • Он написан для оболочки Debian.
  • Это работает для Owncloud 9.1 с Mysql.
  • Предполагается, что URL для загрузки общего календаря выглядит следующим образом:

    < EM> OwncloudURL / remote.php / DAV / календари / LoggedInOwncloudUser / CalendarName_shared_by_CalendarOwner ? Экспорт

    Чтобы проверить правильность URL-адреса, просто загрузите общий веб-календарь в веб-интерфейсе и проверьте URL-адрес загрузки.

  • Предполагается, что названия календаря хранятся в столбце «uri» таблицы «oc_calendars».

  • Предполагается, что владелец календаря хранится в столбце «Principaluri» таблицы «oc_calendars» и что все обычные пользователи имеют префикс «принципалы / пользователи /».

  • Для обновления структуры файла Owncloud необходимо разрешение sudo.

  • Нужно установить почтовый индекс.
0
Envyrus 28 Май 2017 в 09:28

Я давно пользуюсь этим скриптом. Это помогло мне создать резервную копию календарей и контактов из моей установки onwCloud. Спасибо!

Тем не менее, одна вещь действительно доставила мне неудобство при использовании сценария envyrus: новые календари / адресные книги должны передаваться вручную «backup-user», чьи календари будут сохраняться. Это сделало сценарий практически бесполезным для меня, потому что моя жена создавая и удаляя ее календари и списки задач довольно часто.

Существует скрипт, который может автоматически работать с дополнительно созданными / удаленными календарями, поскольку он получает все данные из базы данных, а не через http-запрос (как скрипт из envyrus). Он просто создает резервную копию каждого календаря / адресной книги, существующей в базе данных. При использовании этого сценария указывать комбинацию имени пользователя и пароля не требуется. Также нет необходимости делиться календарями для резервного копирования с определенным пользователем. И последнее, но не менее важное: скрипт не требует прав суперпользователя.

Из сценариев AD README:

Этот скрипт Bash экспортирует календари и адресные книги из ownCloud / Nextcloud в файлы .ics и .vcf и сохраняет их в сжатый файл. Дополнительные опции доступны.

Начиная с версии 0.8.0, больше нет необходимости в файле с учетными данными пользователя, поскольку все данные извлекаются непосредственно из базы данных. Если необходимо создавать резервные копии только календарей / адресных книг определенных пользователей, перечислите их в users.txt без каких-либо паролей.

Возможно, это также поможет другим: calcardbackup

0
BernieO 22 Мар 2019 в 15:59