Итак, я проверял свою конфигурацию 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, но меня не волнует результат, и если он не удастся, просто продолжайте и попробуйте следующее».