Google всё сломал (опять)
Google Диск становится всё хуже и хуже. К несчастью, сколько-нибудь годных альтернатив Google Документам не существует, поэтому приходится им пользоваться. И приходится его бэкапить.
Последние года два у меня из cron (а позже — из таймера systemd) запускается rclone и синхронизирует содержимое Google Диска в локальную директорию, откуда оно попадает в бэкап обычным для моей системы путём. Загрузка документов настроена в виде файлов OpenDocument (текстовые документы становятся .odt
, таблицы — .ods
, и т. д.), и всё это отлично работает. Ну, работало, до недавнего времени.
Внезапно rclone стала выдавать ошибки при скачивании документов. Заметил, в общем-то, случайно: для отладки другой программы был открыт системный лог бэкапного сервера, и как раз совпало, что rclone запустилась в это время. При внимательном рассмотрении оказалось, что все документы, созданные или изменённые после 13 июня 2021 года отказываются скачиваться:
Тыкание в Google Drive API быстро показало, что любой файл в формате OpenDocument скачать таки можно, если соответствующие разрешения есть. Оказалось, что, настраивая всё пару лет назад, я дал rclone разрешения drive.readonly
вместо drive
. Этого вполне хватало — в конце концов, у меня синхронизация только в одну сторону. Но вот теперь внезапно этих разрешений недостаточно, надо давать полностью drive
, чтобы всё работало.
Конечно, как только я всё это выяснил, сменить разрешения было делом полуминуты. Вопрос: а смог ли бы я сообразить, в чём дело, если б у меня не было какого-никакого опыта использования Docs API? Очень я сильно сомневаюсь, особенно с учётом того, насколько по делу выглядит сообщение об ошибке.
Google, ну какого хрена, а?!
И да: надо-таки завести привычку включать в юнитах systemd отсылку писем при ошибках. Тем более, это просто совсем, у меня даже юнит под это есть уже:
[Unit]
Description=OnFailure email for %i
[Service]
Type=oneshot
ExecStart=/home/evgeny/scripts/failure-email.sh %i
Скрипт failure-email.sh
тоже в одну строку:
#!/bin/bash
mail -s "$1 failed" root <<< $(systemctl --user status -l -n 1000 "$1")
Надо только не забывать добавлять одну строчку в юниты:
OnFailure=failure-email@%n.service
Реакции
Ejitsu