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

Таким образом, у меня открыт открытый туннель 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: вход накапливается, а эти программы приостанавливаются, а не игнорируются. Выходные данные просто подавляются до тех пор, пока процесс не будет возобновлен.

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

  • Как я могу переместить процесс в фоновом режиме, а также отключить его вывод?
  • Что остановит выполнение задачи в фоновом режиме?
  • почему местная авария убила мои удаленные задания?
  • Что означает «fg»?
  • Что такое использование команды bg в реальном мире?
  • почему убить работать по-разному на номера работ, чем PID?
  • Почему не ставится elinks в фоновом режиме, а затем возобновляется с `fg` работать надежно?
  • Замена очереди теперь, когда пакет не принимает входные файлы?
  • 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 мог догнать то, что он еще не прочитал из файла, если он есть.

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