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