вывод logrotate к/dev/null дважды?

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

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

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

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

Что касается || true, почему это там?

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

0
задан 24 September 2014 в 14:17
1 ответ

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

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

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

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

2
ответ дан 4 December 2019 в 13:56

Теги

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