@driverx18

Зачем /dev/null, если можно без него?

Часто видел такое в кроне: /dev/null 2>&1, и сейчас решил разобраться =)
Как я понял, это якобы - вывод в никуда. Чтобы мой скрипт по итогу ничего никуда не выводил, и просто все записи попадали в /dev/null (черную дыру, в никуда грубо говоря). НО, я задался вопросом, зачем? Зачем это писать, если, возможно можно не писать? Почему мы должны напрямую говорить ВЫВЕДИ В НИКУДА, чем это лучше, чем ему на прямую не сказать: не выводи (не указывать /dev/null 2>&1) ?
  • Вопрос задан
  • 1059 просмотров
Решения вопроса 1
fzfx
@fzfx
18,5 дм
driverx18, считается, что у любой программы может быть вывод. если у конкретной программы его нет - то это свойство конкретной программы, я говорю об общем случае.
по умолчанию, если не указано, куда выводить стандартный поток сообщений, то вывод идёт в стандартное устройство вывода - на консоль.
по умолчанию, если не указано, куда выводить стандартный поток ошибок, то вывод идёт в стандартное устройство вывода - на консоль.
если приложение, запущенное через cron, делает вывод в стандартный поток сообщений и/или в стандартный поток ошибок, то cron это перехватывает и, в зависимости от настроек, может херить или, что встречается чаще, передавать в подсистему логгирования, класть в мейлбокс.
поэтому, если вывод сообщений и ошибок принудительно не переназначить в другое место (например, в /dev/null), он, как правило, окажется в почте.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
Вот вам пример: есть некий сервис S, слушающий порт 80, нужно раз в секунду делать на него http запрос через curl (или wget), как только S начал отвечать 200-ым ответом, без ошибок - выполнить команду C. При этом любой ответ от curl/wget - ожидаемый, даже невозможность определить ip по хосту, и его не нужно выводить в консоль, или логгировать как-то по другому.
Это пример из жизни, используется при старте контейнеров через docker-compose, для выполнения последовательности запуска и миграций.
Ответ написан
Комментировать
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Абсолютному большинству программ в линухе нельзя сказать - не выводи ничего. Есть отдельные программы с "тихим" режимом, но большинство выводит свои ошибки в консоль, причем иногда весьма подробно. В очень большом количестве случаев этот вывод тебе накуа не нужен - и его отправляют в /dev/null
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы