сравнение значений 1-го и 3-го столбцов в двух файлах [закрыто]

El problema es que solo le estás diciendo que detenga el proceso, lo que también deja de monitorearlo.

En este caso, la solución más fácil es escribir un script que le diga a launchd que reinicie el proceso (Lamentablemente, no puedo ayudar con eso específicamente, no sé mucho sobre macOS ), y luego use un solo condicional en la configuración de monit para cada servicio para ejecutar el script como este:

if cpu > 20% for 1 cycles then exec "/path/to/script"

La cláusula execaún enviará una alerta por correo electrónico cuando se active, el script se ejecutará para reiniciar el proceso/servicio y luego monit seguirá observándolo ya que no se le indicó que deje de verlo.

Suponiendo que adopte este enfoque, también puede eliminar la línea stop programde las definiciones, ya que no se usará a menos que ejecute monit stopen los servicios.

Editar para aclarar más las cosas:

Monit espera que el sistema operativo no maneje la supervisión del proceso. En otras palabras, asume que es el único responsable de iniciar o detener procesos y, por lo tanto, cuando le dices que detenga algo, detendrá ese proceso, y dejará de monitorearlo, porque asume que nada lo hará. intente iniciarlo de nuevo (y, por lo tanto, es un poco molesto usarlo a veces con macOS's launchd o systemd en Linux ).

En su caso, lo que desea es reiniciar el proceso si usa demasiada potencia de procesamiento y avisarle cuando esto suceda. Hay dos formas de hacer esto con monit:

  1. Defina un start programy stop programpara él, que si usa un supervisor de proceso separado como su sistema de inicio (que hace macOS )deberían ser comandos que indiquen que inicie o detenga el programa, y ​​luego decirle a monit que reinicie el proceso si ocurre la condición, así como agregar una condición para recibir una alerta. En macOS, necesita el comando launchctlpara manejar el reinicio. Si bien esta es la forma preferida y "correcta" de hacerlo,launchctles un poco complicado trabajar con (parece suponer que nadie quiere reiniciar manualmente los servicios ), por lo que no es el enfoque que recomendaría.
  2. Escriba un script que active el reinicio y luego especifique la ruta a ese script como una acción execpara la condición. execLas acciones envían alertas implícitamente en las versiones actuales de monit, por lo que no es necesario especificar ninguna condición de alerta en este caso. En su caso, el 'script' puede ser simplemente el siguiente para el primer servicio:

    #!/bin/bash
    /usr/bin/pkill -9 soaagent
    

    Y luego algo similar para el segundo. Lo único que debe hacer es activar de alguna manera el inicio y reiniciar el servicio, no necesita reiniciarlo por sí mismo. En esencia, este enfoque solo le dice a monit que active el reinicio tal como lo intenta hacer arriba, solo lo hace de una manera un poco más limpia para obtener el resultado que desea.

0
13.07.2018, 10:39
1 ответ
$ join -t, file1 file2 | awk -F, '$3 == "v1" && $5 == "v2" { print $1 }'
a

$ join -t, file1 file2 | awk -F, '$3 == "v2" && $5 == "v1" { print $1 }'
b

Предполагается, что оба файла отсортированы. Если это не так, используйте

join -t, <( sort file1 ) <( sort file2 ) | awk...as above...

Команда joinвыдаст

a,txt1,v1,txt5,v2
b,txt2,v2,txt6,v1
c,txt3,v1,txt7,v1
d,txt4,v2,txt8,v2

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

Код awkсмотрит на это и печатает первый столбец, только если в столбцах 3 и 5 есть значения, которые мы ищем.

2
28.01.2020, 02:31

Теги

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