Как позволяет Bash Coprocess достичь своей трубопроводы?

Вы запускаете logrotate -d /etc/logrotate.conf с аргументом -d .

Аргумент -d - это режим отладки, можно сказать «пробный запуск». Он предоставит вам информацию только в том случае, если logrotate будет работать, но не будет вращать журналы.

logrotate -f работал, поскольку аргумент -f указывает logrotate для принудительного выполнения logrotate.

Цитата из руководства logrotate :

  • -d, --debug

    Включает режим отладки и подразумевает -v. В режиме отладки никакие изменения не будут внесены в журналы или файл состояния logrotate.

  • -f, --force Указывает logrotate принудительно выполнить поворот, даже если он не считает это необходимым. Иногда это полезно после добавления новых записей
    в файл конфигурации logrotate или если старые файлы журнала были
    удалены вручную, поскольку новые файлы будут созданы, и регистрация
    будет продолжена правильно.

Если logrotate -d / etc / logrotate.conf дал вам вывод, что журнал будет вращаться и сжиматься, тогда он обязательно будет вращать его, когда logrotate будет просматривать ваш файл конфигурации.

0
10.01.2019, 06:30
1 ответ

Он создает один для стандартного ввода и один для стандартного вывода , точно так же конвейеры к подпроцессам всегда работают. Вот почему вы получаете два fd в массиве . Один конец каждого канала находится в родительском (как FD в массиве ), а один конец каждого канала находится в дочернем (как fd 0 и fd 1, stdin и stdout ). Запись в fd 1 дочернего элемента дает вам что-то для чтения из COPROC[0]и наоборот -для стандартного ввода.

Эта настройка также описана на странице руководства в абзаце после процитированного вами. Ничего особенного не происходит, и он делает то же самое , используя стандартную pipeфункцию во всех системах, независимо от того, как работают локальные каналы помимо того, что обеспечивает POSIX.

3
28.01.2020, 02:23

Теги

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