- Вопрос или проблема
- Ответ или решение
- Подробное руководство по перенаправлению выходных данных из скрипта Docker в локальный файл с использованием cron и borg
- 1. Обзор текущей конфигурации
- 2. Правильное перенаправление вывода
- 3. Проверка прав доступа
- 4. Тестирование конфигурации
- 5. Устранение возможных ошибок
- Заключение
Вопрос или проблема
В настоящее время я перехожу с rsync на резервное копирование на основе borg.
Все работает, кроме получения вывода borg в мой журнал.
Моя настройка выглядит следующим образом:
- Я пытаюсь сделать все в docker, чтобы мой сервер был как можно более легким и чтобы его можно было быстро воссоздать. Поэтому я запускаю borg через контейнер docker.
- центральный скрипт local_backup.sh, который выполняет несколько задач резервного копирования, включая задачу borg
- Внутри скрипта я выполняю резервное копирование borg с помощью “docker run..” (выдержка):
echo "--- резервное копирование nextcloud"
docker run --rm \
-e BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes \
-v /root/.cache:/root/.cache \
-v /mnt/G/Backup/automatic/borg:/backup \
-v /mnt/E/dockervolumes/freundx-nextcloud/nextcloud:/nextcloud:ro \
peez/playground \
borg create --stats --verbose --compression lz4 --exclude '*.log*' /backup::nextcloud-{now} /nextcloud
echo "--- резервное копирование nextcloud завершено"
- Этот скрипт вызывается через crontab:
50 8 * * * root /opt/freundx/admin_scripts/local_backup.sh 2>&1 >> /mnt/E/logs/local_backup.log
Само резервное копирование работает прекрасно.
Единственное, что в журнале, я получаю только две “эхо”, а не выводы borg в свой файл local_backup.log. Возможно, у вас есть идея, чего мне не хватает?
Кстати, это тоже не работает, когда я выполняю ту же команду из файла crontab через командную строку. Вывод идет в консоль, а не в файл.
Ваш cron должен выглядеть так:
50 8 * * * /opt/freundx/admin_scripts/local_backup.sh &>> /mnt/E/logs/local_backup.log 2>&1
Нет необходимости указывать пользователя в команде, она будет выполнена с правами пользователя, который создал cron, убедитесь, что у пользователя, выполняющего cron, есть разрешения на запись в файл журнала.
Часть 2>&1
должна быть в конце команды, это обеспечит сохранение всего вывода в журнале.
Часть &>>
должна находиться между командой и путем к журналу, чтобы гарантировать, что все выполнение будет перенаправлено в файл журнала.
Ответ или решение
Подробное руководство по перенаправлению выходных данных из скрипта Docker в локальный файл с использованием cron и borg
Вам удачно удалось настроить процессы резервного копирования с использованием Borg, однако возникла проблема с перенаправлением выходных данных на локальный файл журнала. В данной статье мы обсудим, как правильно настроить cron для выполнения вашего скрипта и перенаправления выхода на лог-файл, чтобы избежать упущения важной информации.
1. Обзор текущей конфигурации
Ваш скрипт local_backup.sh
, который выполняет резервное копирование с использованием Docker, работает корректно. Однако, проблема заключается в том, что выходные данные Borg не сохраняются в указанный файл журнала. Ваш текущий вызов cron выглядит так:
50 8 * * * root /opt/freundx/admin_scripts/local_backup.sh 2>&1 >> /mnt/E/logs/local_backup.log
В таком виде у вас есть риск, что только статусные сообщения echo
сохраняются в лог-файле, а выход Borg передается в stdout терминала, но не отправляется на запись в файл.
2. Правильное перенаправление вывода
Чтобы обеспечить корректное перенаправление всех выходных данных вашего скрипта, вам нужно изменить строку cron следующим образом:
50 8 * * * /opt/freundx/admin_scripts/local_backup.sh >> /mnt/E/logs/local_backup.log 2>&1
Объяснение изменений:
>> /mnt/E/logs/local_backup.log
: обеспечивает добавление (append) выходных данных в файл.2>&1
: направляет все сообщения об ошибках (stderr) в stdout, что гарантирует, что и сообщения об успехе, и ошибки будут записаны в один и тот же лог-файл.
3. Проверка прав доступа
Важно убедиться, что пользователь, под которым выполняется cron, имеет права на запись в файл журнала /mnt/E/logs/local_backup.log
. Если нет, это может быть причиной того, что выходные данные не записываются.
4. Тестирование конфигурации
Для того чтобы убедиться, что всё работает корректно:
-
Запустите ваш скрипт вручную из командной строки:
/opt/freundx/admin_scripts/local_backup.sh >> /mnt/E/logs/local_backup.log 2>&1
-
Проверьте содержимое файла лога:
cat /mnt/E/logs/local_backup.log
Эти шаги помогут вам определить, записываются ли выходные данные и ошибки в файл правильно.
5. Устранение возможных ошибок
Если, несмотря на все действия, выходные данные все еще не записываются, рассмотрите следующее:
- Проверьте логи системного задания cron (обычно находятся в
/var/log/syslog
или/var/log/cron.log
). - Убедитесь, что команда borg в вашем скрипте возвращает корректный статус выполнения. Вы можете добавить вывод команд обратно в лог для дополнительной диагностики.
- Убедитесь в корректности работы контейнера Docker и прав доступа к монтируемым томам, чтобы данные были доступны из вашего скрипта.
Заключение
С правильной настройкой перенаправления выходных данных и проверкой прав доступа к файлу, вы сможете успешно укрепить вашу систему резервного копирования с использованием Borg, сохраняя все важные сообщения в локальном файле журнала. Это обеспечит вам легкий доступ к информации а также упростит процесс мониторинга и устранения неполадок.