Назад | Перейти на главную страницу

logrotate выводить в / dev / null дважды?

Итак, я проверял свою конфигурацию logrotate для httpd, и в разделе postrotate ... endscript он имеет следующее:

/sbin/service httpd reload > /dev/null 2>/dev/null || true

Первый я понимаю, если есть вывод, отправьте его в / dev / null, но зачем вторую запись?

Я проверил и 2> означает stderr для файла. Итак, если я правильно понимаю, первая запись говорит скрипту отправить stdout в / dev / null и второй, stderr в / dev / null, это правильно?

Для || true, почему это там?

Кроме того, если &> означает как stdout and stderr, могу ли я заменить обе записи и просто указать один раз следующее: /sbin/service httpd reload &> /dev/null ?

Первый редирект просто покрывает stdout - ошибки обычно отправляются stderr вместо этого он все равно попадет на консоль без второго перенаправления, которое сообщает оболочке отправлять вывод ошибки на /dev/null слишком.

«2» относится к дескриптору файла: 0 - стандартный ввод, 1 - стандартный вывод и 2 - стандартный поток, поэтому > /dev/null сокращение для 1> /dev/null предполагая, что вы обычно имеете в виду stdout. Другой способ выполнить второе перенаправление: 2>&1 что означает "отправить вывод на fd 2 на fd 1" (и поскольку fd 1 будет /dev/null этот вывод тоже будет).

|| true означает «или правда». Это означает, что в случае сбоя основной команды выполнение не будет остановлено, даже если оболочка, запускающая сценарий, настроена на остановку для всех неудачных команд. В true команда (или встроенная оболочка) ничего не делает, а просто возвращает значение, которое обычно указывает на успех.

По сути, в строке говорится: «Сделайте X, но меня не волнует результат, и если он не удастся, просто продолжайте и попробуйте следующее».