Заставить процесс игнорировать / отбрасывать накопленный вход во время приостановки?

Таким образом, у меня открыт открытый туннель SSH, и я использую tail для вывода вывода журнала sshd в awk для обнаружения определенных событий входа и запуска действия. Это выглядит так:

 ssh -NR 2222:127.0.0.1:22 server & tail -fn 0 /var/log/auth.log | \ awk '/Invalid user [az]+ from 127.0.0.1/ {system("rsync -a source dest")}' 

(Чтобы быть ясным, я инициирую эти неудавшиеся логины с сервера сам, специально, как способ запуска rsync на клиентской машине, как это было предложено мне в этом потоке .)

Теперь я хотел бы приостановить весь процесс обнаружения, чтобы я мог игнорировать данную попытку входа. Мое мышление состоит в том, чтобы сделать одно из трех:

  1. Предотвратите ssh от создания сообщения «Недопустимый пользователь»,
  2. Предотвратите вывод из него tail или
  3. Не позволяйте awk видеть это.

Я попытался приостановить, а затем возобновить все три процесса, и вот что происходит:

ssh: пока туннель приостановлен, сервер ждет бесконечно, когда пытается подключиться к клиенту. Если я укажу параметр ConnectionTimeout при подключении к серверу, я могу сделать сбой подключения и заставить его создать другое сообщение об ошибке – успех! – но я чувствую, что этот подход требует проблем с условиями гонки.

tail & awk: вход накапливается, а эти программы приостанавливаются, а не игнорируются. Выходные данные просто подавляются до тех пор, пока процесс не будет возобновлен.

есть ли способ добиться того, что мне нужно?

  • Замена очереди теперь, когда пакет не принимает входные файлы?
  • почему местная авария убила мои удаленные задания?
  • Почему не ставится elinks в фоновом режиме, а затем возобновляется с `fg` работать надежно?
  • Что означает «fg»?
  • почему убить работать по-разному на номера работ, чем PID?
  • Что остановит выполнение задачи в фоновом режиме?
  • Как я могу переместить процесс в фоновом режиме, а также отключить его вывод?
  • Что такое использование команды bg в реальном мире?
  • One Solution collect form web for “Заставить процесс игнорировать / отбрасывать накопленный вход во время приостановки?”

    Вы можете приостановить только awk и очистить трубу, которую она читает из-под ног, прежде чем возобновить ее. В Linux-системах и GNU dd :

    Где $pid – это PID awk :

     kill -s STOP "$pid" 

    остановить его и

     dd iflag=nonblock if="/proc/$pid/fd/0" > /dev/null; kill -s CONT "$pid" 

    возобновить.

    Это предполагает, что труба не заполнена (по умолчанию 64KiB в Linux), так как иначе tail мог быть заблокирован. Чтобы обойти это, вы можете промыть трубку:

     socat -T0.2 -u "/proc/$pid/fd/0" /dev/null 

    Это будет очищать то, что в настоящее время находится в трубе, и продолжать читать, пока не появится больше 0,2 секунды, чтобы tail мог догнать то, что он еще не прочитал из файла, если он есть.

    Interesting Posts

    Возможно ли удаленно войти в учетную запись FTP без установки какого-либо программного обеспечения?

    Копирование данных csv при одновременном заполнении последовательной колонки

    Ошибка Grub: файл '/grub/i386-pc/normal.mod' не найден?

    Как просмотреть результаты поиска htop

    Подключитесь к удаленному серверу mysql с bash php или perl

    Объединить изображения гибких дисков в Raspbian

    Имеет ли смысл иметь отдельные объемы ubi для безопасности с ubifs?

    cat / dev / null> file.log не обрезает большой файл в Дарвине

    Автоматическое монтирование устройства iscsi при запуске системы (Ubuntu)

    Debian Jessie не может установить расширение GNOME, не обнаружен собственный соединитель узла

    ld.so.preload не отличается x86_32 и x86_64

    Как проверить загрузочный USB, созданный с помощью схемы разделов UEFI GPT

    Проблема KVM и свопа

    Что ограничивает использование моего процессора в разветвленных процессах?

    Как перенаправить демона и stderr с помощью start-stop-daemon (8)?

    Linux и Unix - лучшая ОС в мире.