`tail -n 40 / var / log / apache2 / error.log` без` sudo `

Строго говоря, ответ:

Много программ при передаче по каналу где-нибудь буферизуют свой вывод — они пишут несколько строк сразу. Это увеличивает производительность, но конечно повреждает Ваши попытки к grep вывод. GNU Coreutils включает утилиту stdbuf который часто позволяет Вам изменить это. Вы хотели бы изменить stdout или stderr к с буфером строки. Это могло бы работать — но является, вероятно, не лучшим решением.

Лучший путь:

Если Вы заглядываете /etc/ppp, Вы будете видеть, что существует несколько сценариев там, включая /etc/ppp/ip-up. Когда ссылка PPP подходит, pppd запускает тот скрипт. По крайней мере, на Debian, тот сценарий затем запускает все скрипты в /etc/ppp/ip-up.d/.

Таким образом, много простого решения состоит в том, чтобы вставить Ваш сценарий оболочки /etc/ppp/ip-up.d/ или отредактировать (или создать, если это не существует), /etc/ppp/ip-up. Существует так же …ipv6-up, и также …-down варианты также. Еще существуют некоторые; проверьте pppd раздел "Scripts" страницы справочника для деталей.

Следует иметь в виду, что можно просто использовать сценарий для передачи сигналов о сценарии (или некоторый другой), что ссылка готова — это не должно делать самой работы. Например, Вы могли предупредить с чем-то столь же простым как kill -USR1 other-script-pid и затем используйте trap & sleep ожидать того сигнала. Или Вы могли открыть именованный канал ("первым прибыл, первым обслужен", например, mkfifo) для чтения (который заблокируется до, существует устройство записи) и затем имеют сценарий просто echo alive > /path/to/fifo. Или, возможно, отреагируйте на IP-адрес или другую полезную информацию. Или Ваш сценарий мог kill -STOP $$, и затем Ваш пишут сценарий, мог kill -CONT script-pid. Существует набор способов выполнить это. (Вы могли даже полностью выложиться и использовать dbus.)

2
05.08.2016, 04:23
3 ответа

Я нашел lazytime , вариант монтирования для ext4, который решает это удовлетворительно для меня.

https://lwn.net/Articles/620086/

В этом режиме обновления atime, mtime и ctime выполняются только для версии inode в памяти. Время на диске будет обновляться только тогда, когда (а) когда блок таблицы inode для inode должен быть обновлен для некоторого изменения, не связанного с временем, включая любой inode в блоке, (b) если userspace вызывает fsync (), или (c) обратный счет в нераспределенном inode переходит в ноль (в большинстве случаев, когда последний дескриптор файла, связанный с inode, закрыт).

Эта опция доступна с ядра 4.0.

Также необходимо переопределить значение по умолчанию relatime , в противном случае в дополнение к функциям кэширования lazytime появится relatime . Для этого установите strictatime И lazytime .

-121--108339-

Я могу придумать множество решений для этой конкретной проблемы:

(A) Настройте доступ sudo таким образом, чтобы имя пользователя не требовало пароля для команды tail (или для всех команд, если требуется)
Для этого см. документацию sudo и sudoers.

(B) Конфигурирование доступа sudo с отрицательным тайм-аутом. Тайм-аут по умолчанию составляет 5 минут, после этого потребуется повторно ввести пароль.
Установив для тайм-аута отрицательные значения, вам, возможно, придется вводить пароль только один раз, и sudo не будет приставать к вам после этого.

(C) Используйте tmux (или экран) и выполните команду tail в одной панели (или в одном окне).
При необходимости просмотра журналов можно просмотреть эту панель (или окно).

(D) Пробег задний наземный процесс, который посылает «хвост-f» продукция к файлу в/tmp/ApacheError, который является точной копией регистрации, к которой вы хотите получить доступ. В зависимости от системных настроек может потребоваться также "тройник".
Теперь войдите в систему/tmp/ApingError, которая имеет разрешение на чтение для всех пользователей.

(E) Рассмотрите возможность использования фильтров журнала apache, которые могут быть использованы для отправки дубликатов выходных данных в/tmp/ApenedError, что потребует ссылки на документацию Apache.
Теперь войдите в систему/tmp/ApingError, которая имеет разрешение на чтение для всех пользователей.

(A) и (B) являются рисками для безопасности. (C) требуется tmux (или экран), который может быть недоступен. (D) безопасно. (E) может потребовать дополнительных исследований.

-121--118350-

Запустите sudo visudo и добавьте следующую строку:

Defaults    timestamp_timeout=-1

-1 = никогда не тайм-аут пароля

См. также man 5 sudoers

Хотя вышеприведенное решение вызывает проблемы безопасности. Перейдите по ссылке , чтобы настроить sudo на выполнение без пароля для определенных команд.

3
27.01.2020, 21:50

chmod u + r не делает то, что вы, по-видимому, думаете; фактически он делает файл доступным для чтения его владельцу . Что, я собираюсь догадаться, уже было.

chmod o + r (сделать файл доступным для чтения «другим», то есть не владельцу / группе), вероятно, сработает, но безопасность возражает против этого.

Выберите один:

  1. ls -l /var/log/apache2/error.log ... в моей (Debian) системе его группа - adm , и это g + r . Группа adm существует в основном для чтения файлов журналов. Так что добавление себя в эту группу позволит мне читать ее (и другие журналы). В Debian это будет sudo adduser anthony adm (где, конечно, anthony - мое имя пользователя). ПРИМЕЧАНИЕ. Вам нужно будет выйти и снова войти, чтобы новая группа вступила в силу. В одном терминале newgrp adm должно работать.

  2. Используйте POSIX ACL, чтобы предоставить себе доступ для чтения к этому конкретному файлу. sudo setfacl -m u: anthony: r /var/log/apache2/error.log (используйте свое имя пользователя вместо anthony ). Хотя в зависимости от того, как ротация журналов работает в вашей системе, вам может потребоваться повторно запустить это после ротации (но вы можете настроить, например, lograte, чтобы сделать это за вас).

  3. Различные способы перенастройки sudo в ответе Прем.

4
27.01.2020, 21:50

Я могу придумать множество решений для этой конкретной проблемы:

(A) Настройте доступ sudo так, чтобы ваше имя пользователя не требовало пароля для команды tail (или для всех команд, если вам это нужно)
{{ 1}} Для этого обратитесь к документации sudo и sudoers.

(B) Настройте доступ sudo с отрицательным таймаутом. Таймаут по умолчанию составляет 5 минут, после чего вам придется повторно ввести пароль.
Установив для тайм-аута отрицательные значения, возможно, вам придется ввести пароль только один раз, и sudo не будет приставать к вам после этого.

(C) Используйте tmux (или экран) и запустите команду tail на одной панели (или одном окне).
Когда бы вы ни захотели просмотреть журналы, вы можете просмотреть эту панель (или окно).

(D) Запустить фоновый процесс, который отправляет вывод "tail -f" в файл в / tmp / ApacheError, который является точной копией журнала, к которому вы хотите получить доступ. В зависимости от настроек вашей системы также может потребоваться «тройник».
Теперь откройте журнал / tmp / ApacheError, у которого есть разрешение на чтение для всех пользователей.

(E) Рассмотрите возможность использования фильтров журнала apache, которые можно использовать для отправки дублирующихся выходных данных в / tmp / ApacheError, что потребует обращения к документации Apache.
Теперь откройте журнал / tmp / ApacheError, который имеет разрешение на чтение для всех пользователей.

(A) и (B) представляют собой угрозу безопасности. (C) требуется tmux (или экран), который может быть недоступен. (D) безопасно. (E) может потребоваться дополнительное исследование.

4
27.01.2020, 21:50

Теги

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