На сервере TrueNAS после выполнения любой команды stderr перенаправляется в /dev/null. Как исправить эту проблему?
Проблема: После ввода любой команды дескриптор stderr (2) меняется с /dev/pts/1 на /dev/null, что делает невозможным вывод ошибок в консоль. Проблема сохраняется даже при переключении на другой shell.
Попытки решения: Команды exec 2>/dev/pts/1 и exec 2>$(tty) не помогли.
Контекст: Проблема возникла 1-2 недели назад без видимых изменений в конфигурации. Подключение через SSH или веб-интерфейс TrueNAS дает одинаковое поведение. Временное решение - перезаход в сессию, но проблема повторяется.
Проблема перенаправления stderr в /dev/null на TrueNAS указывает на системную проблему с дескрипторами ввода-вывода, которая блокирует отображение ошибок в консоли. Эта неполадка обычно вызвана изменениями в конфигурации оболочки или системными скриптами, переназначающими стандартный поток ошибок. Для решения необходимо диагностировать источник проблемы и восстановить правильную работу дескриптора stderr.
Содержание
- Описание проблемы stderr в TrueNAS
- Основные причины возникновения неполадки
- Методы диагностики и восстановления
- Временные и постоянные решения
- Профилактика и мониторинг
Описание проблемы stderr в TrueNAS
На сервере TrueNAS наблюдается системная ошибка, при которой после выполнения любой команды дескриптор stderr (2) автоматически перенаправляется в /dev/null вместо стандартного терминала /dev/pts/1. Это делает невозможным вывод ошибок и диагностической информации в консоль, что серьезно усложняет администрирование системы.
Интересно, что проблема возникает независимо от типа подключения - будь то SSH или веб-интерфейс TrueNAS. Попытки восстановления с помощью команд exec 2>/dev/pts/1 и exec 2>$(tty) не дают результата, что указывает на более глубокий системный сбой. Стоит отметить, что проблема появилась внезапно 1-2 недели назад без видимых изменений в конфигурации, что характерно для скрытых системных скриптов или процессов.
Поведение системы указывает на то, что переназначение stderr происходит на уровне самого интерпретатора командной оболочки или на уровне ядра системы. Это создает серьезные затруднения при отладке и устранении неполадок, поскольку стандартные методы диагностики становятся неработоспособными.
Основные причины возникновения неполадки
Причины, по которым stderr перенаправляется в /dev/null, могут быть разными, но на TrueNAS наиболее вероятные следующие:
Системные скрипты инициализации
Часто проблема скрывается в системных скриптах, которые выполняются при запуске оболочки. На TrueNAS это могут быть скрипты в директориях /etc/profile.d/, ~/.profile или ~/.bashrc. Проверьте наличие строк вида exec 2>/dev/null в этих файлах.
Проблемы с конфигурацией SSH
Если проблема возникает при подключении через SSH, стоит проверить файл конфигурации SSH. В параметрах PermitLocalCommand или RemoteCommand могут быть скрытые перенаправления.
Системные службы и демоны
На TrueNAS некоторые системные службы могут переопределять дескрипторы ввода-вывода. Особенно это касается служб мониторинга, которые автоматически перенаправляют ошибки в системные логи.
Проблемы с конфигурацией shell
Иногда проблема может быть связана с конфигурацией самого интерпретатора командной оболочки. Проверьте переменные окружения, особенно STDERR_FILENO или STDERR_FILENO.
Методы диагностики и восстановления
Для диагностики и решения проблемы stderr на TrueNAS рекомендуется использовать следующий подход:
Проверка текущего состояния дескрипторов
Сначала проверьте текущее состояние дескрипторов ввода-вывода:
lsof -p $$ | grep -E 'txt|cwd|DEL|mem|REG'
Эта команда покажет открытые файлы и дескрипторы для текущего процесса оболочки. Обратите внимание на stderr - он должен указывать на терминал.
Проверка системных конфигурационных файлов
Проверьте ключевые конфигурационные файлы на предмет перенаправления stderr:
grep -r "2>/dev/null" /etc/profile.d/
grep -r "2>/dev/null" ~/.bashrc
grep -r "2>/dev/null" ~/.profile
Использование команды strace
Для отслеживания системных вызовов используйте:
strace -e trace=write -p $$
Эта команда покажет, куда именно перенаправляется вывод ошибок.
Восстановление стандартного поведения stderr
Если вы обнаружили проблему в конфигурационных файлах, удалите строки, перенаправляющие stderr в /dev/null. После этого перезапустите оболочку:
exec $SHELL
Полная перезагрузка системы
В редких случаях может потребоваться полная перезагрузка системы для сброса всех дескрипторов ввода-вывода.
Временные и постоянные решения
Временные решения
Для быстрого восстановления работы stderr используйте следующие команды:
Временное восстановление для текущей сессии
exec 2>/dev/pts/1
Эта команда восстановит stderr для текущей сессии, но проблема вернется после следующего входа в систему.
Использование альтернативного вывода ошибок
команда 2> /tmp/ошибки.log
Перенаправьте ошибки во временный файл для анализа.
Постоянные решения
Для полного решения проблемы необходимо устранить ее коренную причину:
Поиск и исправление системных скриптов
Проверьте файлы в директориях:
/etc/profile.d//etc/bashrc/etc/environment~/.bashrc~/.profile
Удалите или исправьте строки, содержащие 2>/dev/null.
Проверка конфигурации TrueNAS
В TrueNAS проверьте настройки системных служб, особенно:
- Службы мониторинга
- Системные скрипты
- Настройки безопасности
Обновление системы
Убедитесь, что ваша система TrueNAS обновлена до последней версии, так как проблема может быть исправлена в новых релизах.
Профилактика и мониторинг
Регулярный мониторинг состояния stderr
Для предотвращения подобных проблем в будущем рекомендуется регулярно проверять состояние дескрипторов:
# Скрипт для проверки stderr
#!/bin/bash
echo "Проверка дескрипторов ввода-вывода:"
echo "STDIN: $(readlink /proc/$$/fd/0)"
echo "STDOUT: $(readlink /proc/$$/fd/1)"
echo "STDERR: $(readlink /proc/$$/fd/2)"
Автоматическая диагностика
Создайте скрипт для автоматической проверки и восстановления stderr:
#!/bin/bash
stderr_check=$(readlink /proc/$$/fd/2)
if [[ "$stderr_check" == "/dev/null" ]]; then
echo "Обнаружена проблема с stderr, восстановление..."
exec 2>/dev/pts/1
echo "STDERR восстановлен"
else
echo "STDERR в норме: $stderr_check"
fi
Обновление конфигурации системы
Регулярно проверяйте системные конфигурационные файлы на предмет нежелательных изменений. Особенно важно следить за файлами в директориях /etc/ и ~/..
Резервное копирование конфигурации
Сохраняйте резервные копии важных конфигурационных файлов перед внесением изменений:
# Скрипт создания резервной копии
#!/bin/bash
backup_dir="/backup/config/$(date +%Y%m%d)"
mkdir -p "$backup_dir"
cp -r /etc/profile.d/ "$backup_dir/"
cp /etc/bashrc "$backup_dir/"
cp /etc/environment "$backup_dir/"
echo "Резервная копия создана в $backup_dir"
Источники
- TrueNAS Documentation Hub — Официальная документация по проблемам shell и дескрипторов ввода-вывода: https://www.truenas.com/docs/
- TrueNAS Community Forums — Обсуждения проблем с stderr и решения от сообщества: https://forums.truenas.com/c/truenas-general/4
Заключение
Проблема перенаправления stderr в /dev/null на TrueNAS серьезно затрудняет администрирование системы, так как блокирует вывод ошибок в консоль. Основные причины включают системные скрипты, конфигурационные файлы и настройки служб. Для решения необходимо диагностировать источник проблемы и восстановить правильную работу дескриптора stderr. Регулярный мониторинг и создание резервных копий конфигурационных файлов помогут предотвратить подобные проблемы в будущем. Если проблема persists после всех попыток решения, рекомендуется обратиться в TrueNAS Community Forums за дополнительной помощью.
Документация TrueNAS является open-source и активно поддерживается как командой разработчиков, так и сообществом. Для решения специфических проблем, таких как перенаправление stderr, рекомендуется использовать разделы Reference Articles и Concepts and Terminology, где содержится информация о работе shell и дескрипторах. Если вы не нашли решение в документации, вы можете внести свой вклад или сообщить о проблеме через TrueNAS Issue Reporting.

Для обсуждения проблем с shell и stderr в TrueNAS используйте раздел TrueNAS General на наших форумах. Здесь вы можете найти обсуждения от других пользователей, столкнувшихся с подобными проблемами. Если вы не нашли ответа, создайте новую тему, подробно описав проблему, включая версии TrueNAS, шаги воспроизведения и любые попытки решения. Модераторы и опытные пользователи помогут вам найти решение проблемы с перенаправлением stderr.