Как перенаправить вывод mongorestore в файл журнала?

Вопрос или проблема

Вот команда, вывод которой я пытаюсь перенаправить:

$ docker exec -it container sh -c 'mongorestore --archive' < ~/db.dump

Я пытался просто сделать:

$ docker exec -it container sh -c 'mongorestore --archive' < ~/db.dump > restore.log

Я уверен, что есть форумы, которые показывают, как это сделать, но я даже не был уверен, как загуглить то, что я хочу сделать. Буду признателен за любую помощь.

Вы должны сделать перенаправление внутри команды sh -c.

docker exec -it container sh -c 'mongorestore --archive < /db.dump > /restore.log 2>&1'

Использование 2>&1 перенаправляет стандартный вывод ошибок в стандартный вывод, так что оба захватываются в лог-файл.

Уберите -t. Это говорит Docker открыть виртуальный терминал и подключить его к вводу и выводу выполняемого процесса, что мешает перенаправлению. Вам это нужно только тогда, когда вы хотите взаимодействовать с процессом, используя функции терминала.

Это должно сработать:

docker exec -i container sh -c 'mongorestore --archive' < ~/db.dump > restore.log

-i по-прежнему нужен, так как вам нужно, чтобы ввод выполняемого процесса был подключен к перенаправленному вводу команды docker.

Ответ или решение

Чтобы перенаправить вывод команды mongorestore в файл журнала при использовании Docker, вам нужно учесть несколько важных моментов. В этом ответе мы разберем, как правильно настроить перенаправление вывода, чтобы все операции записывались в указанный вами файл.

Шаги для перенаправления вывода

1. Используйте правильные параметры Docker

Для выполнения команды в контейнере Docker, вам не нужно использовать флаг -t (терминал), поскольку это может помешать перенаправлению вывода. Вместо этого достаточно использовать флаг -i, чтобы обеспечить ввод данных в режиме интерактивного выполнения.

2. Перенаправление ввода и вывода

Команда mongorestore требует входного потока данных — это дамп вашей базы данных. Вместе с этим, вам нужно будет перенаправить как стандартный вывод, так и стандартный вывод ошибок в файл журнала.

Ваша команда должна выглядеть следующим образом:

docker exec -i container sh -c 'mongorestore --archive < /db.dump > /restore.log 2>&1'

Объяснение команд

  • docker exec -i container: Эта часть командной строки запускает команду в указанном контейнере без создания терминала.

  • sh -c: Этот параметр запускает команду в оболочке sh, что позволяет использовать сложные конструкции, такие как перенаправление.

  • 'mongorestore --archive < /db.dump > /restore.log 2>&1': Внутри этой строки:

    • mongorestore --archive < /db.dump: Выполняет восстановление из дампа.
    • > /restore.log: Перенаправляет стандартный вывод в файл restore.log.
    • 2>&1: Перенаправляет стандартный поток ошибок (stderr) в стандартный поток вывода (stdout), обеспечивая запись всех сообщений — как успешных, так и ошибок — в один файл.

Рекомендации

  1. Проверьте наличие файла дампа: Убедитесь, что файл db.dump доступен в контейнере. Путь к файлу должен быть относителен к файловой системе контейнера.

  2. Права доступа: Убедитесь, что у вас есть права на запись в файл restore.log в контейнере. Если требуется, вы можете использовать полные пути для указания места сохранения журнала.

  3. Просмотр результатов: Чтобы убедиться, что все прошло успешно, проверьте содержимое restore.log после выполнения команды с помощью:

    docker exec -i container cat /restore.log

Эти шаги должны помочь вам успешно перенаправить вывод команды mongorestore в файл журналов, обеспечивая при этом полный контроль над процессом восстановления данных.

Оцените материал
Добавить комментарий

Капча загружается...