Сообщения об ошибках Serial Getty

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

awk -F'[<>="[:blank:]]+' '
  $2 == "domain" {group = $(NF-1)}
  !(group == "group1" && $2 == "node" && $(NF-1) == "PQR")
  ' < dest.xml > new-dest.xml

чтобы удалить это Узел "PQR" в домене "group1".

$ diff -u dest.xml new-dest.xml
--- dest.xml    2013-02-22 07:01:48.732227421 +0000
+++ new-dest.xml        2013-02-22 07:02:16.111512820 +0000
@@ -1,6 +1,5 @@
 <domain id="1" group_name="group1">
     <node id="ABC">
-    <node id="PQR">
     <node id="XYZ">
 </domain>
 <domain id="2" group_name="group2">

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

В качестве альтернативы вы можете заменить этот узел пробелами, что означает, что вы можете уйти с заменой только этих байтов.

perl -ne '
  if (/<domain.*group_name="(.*?)"/) {
    $in = $1 eq "group1"
  } elsif ($in && /<node id="PQR"/) {
    s/./ /g;
    seek STDOUT,tell(STDIN)-length$_,0;
    print
  }' < dest.xml 1<> dest.xml

Добавьте ; exit после print выше, если есть только один такой узел и вы хотите остановить обработку, как только найдете его.

0
31.05.2018, 12:09
3 ответа

gettyes uno de los programas Unix más antiguos. Está utilizando un programa funcional escrito por Wietse Venema, agetty, que fue escrito cuando gettytenía alrededor de veinte años.

Este programa se está ejecutando porque su sistema cree que tiene un terminal conectado a un dispositivo serie, con el nombre de archivo de dispositivo de caracteres /dev/ttyS0. Cuando su sistema arrancó, un programa llamado systemd-getty-generatorvio ttyS0en /sys/class/tty/console/active, debido a que aparece después de console=en la línea de comando del kernel. El generador hizo que la unidad de servicio de plantilla serial-getty@.servicese instanciara como serial-getty@ttyS0.service; y este es el servicio cuyos intentos de activación está registrando.

El servicio proporciona registro de terminal -a través de ese dispositivo.

Por alguna razón (suponiendo que tiene una versión de systemd de 2014 o posterior ), su sistema es inconsistente,y ahora cree que /dev/ttyS0no es un archivo de dispositivo de caracteres, y mucho menos un dispositivo de caracteres que es una terminal. systemd-getty-generatorpensó que estaba en el arranque. Hay al menos dos formas en las que podría haber cambiado. Lo cual, si es que ha ocurrido, no puede determinarse a partir de su pregunta.

Arreglar /dev/ttyS0.

  • Si se supone que es un dispositivo de caracteres pero no lo es, averigüe qué lo está cambiando en tiempo de ejecución.
  • Si no se supone que sea un dispositivo de caracteres, averigüe por qué era un dispositivo terminal en el arranque cuando systemd-getty-generatorlo verificó. También deje de decirle al kernel en su línea de comando que es la consola. Si no se supone que es un dispositivo de caracteres, porque no tiene un puerto serie (con terminal conectado o sin ), entonces decirle al kernel que un puerto serie no -existente es la consola es simplemente incorrecto.
  • Si se supone que es un dispositivo de caracteres que es una terminal, pero no desea poder iniciar sesión desde esa terminal, deje de decirle al kernel en su línea de comando que es la consola.
  • Si se supone que es un dispositivo de caracteres que es una terminal, pero quiere que sea la consola del kernel pero todavía no quiere poder iniciar sesión desde esa terminal (o de hecho, cualquier otra consola de terminal no -virtual -), deshabilite systemd-getty-generatorporque su funcionalidad principal no es lo que desea.

Lecturas adicionales

3
28.01.2020, 02:31

En cualquier sistema Unix, gettyes el nombre tradicional de un proceso que presenta un aviso de inicio de sesión en una conexión de puerto serie (ya sea una terminal cableada o una línea de módem )y espera a que el usuario inicie sesión.

En un sistema moderno (físico ), los procesos gettynormalmente se encuentran proporcionando la solicitud de inicio de sesión en la consola virtual de modo de texto -(s ). Si el sistema tiene hardware de acceso remoto a la consola (como HP iLO, Sun/Oracle ILOM, Fujitsu IRMC u Oracle iDRAC ), a menudo proporcionan puertos seriales virtuales a los que se puede acceder estableciendo una conexión SSH a través de la interfaz de la consola remota, si el administrador del sistema simplemente configura un proceso gettypara el puerto serial correspondiente.

Esto suele ser mucho más confiable que usar una interfaz de consola remota basada en web -que usa Java o HTML5 :ya que un puerto serial virtual no tiene que emular un teclado de PC, no tiene que invertir -asigne los caracteres entrantes nuevamente a los códigos de escaneo del teclado y espere que el diseño del teclado realmente configurado en el sistema operativo del servidor coincida con el que se usó para la operación de asignación inversa -. Y en el lado de la salida, no tiene que intentar raspar la RAM de video para obtener una imagen visualizable.

En máquinas virtuales, los puertos seriales virtuales se pueden usar de la misma manera, por la misma razón :una conexión de puerto serial virtual necesita menos transformaciones en los datos que un "KVM virtual".

En su caso específico, el sistema operativo de la máquina virtual en la nube aparentemente está configurado para esperar un puerto serie virtual como /dev/ttyS0, pero parece que el puerto serie virtual no existe en la máquina virtual en este momento. ¿Quizás fue utilizado en el proceso de inicialización de VM por la infraestructura de la nube?

Probablemente pueda cerrar el proceso gettyen /dev/ttyS0, ya que no parece estar haciendo nada útil en este momento. Para hacer eso,estos comandos pueden ser la solución más simple:

systemctl stop serial-getty@ttyS0.service
systemctl disable serial-getty@ttyS0.service

El primer comando le dice a systemdque deje de intentar iniciar el proceso hasta el próximo reinicio, el segundo comando lo marcará persistentemente como deshabilitado.

Hasta que utilice el segundo comando, el primer comando se puede deshacer simplemente reiniciando el sistema. Entonces, si no está seguro, puede usar el primer comando y esperar unos días para ver si causa algún problema. Si encuentra que ahora no se puede acceder a su VM, un simple reinicio devolvería las cosas a lo que solían ser.

Como en la respuesta de JdeBP , también debe verificar sus opciones de arranque :si console=ttyS0aparece allí, systemdgenerará automáticamente un proceso gettyen /dev/ttyS0.

0
28.01.2020, 02:31

Я решил это, отредактировав /etc/systemd/journald.confи установив

MaxLevelSyslog=warning
0
24.06.2020, 08:25

Теги

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