Quiero solucionar los problemas de arranque de mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7, RHEL 8 o RHEL 9. Quiero registrar la invocación de datos de usuario y, a continuación, enviarla a los registros de la consola.
Descripción corta
Para solucionar problemas con el arranque de la instancia de EC2, modifica el script bash de datos de usuario para redirigir todos los resultados. Redirige el resultado a /var/log/user-data.log y /dev/console. Cuando se ejecuta el script, puedes ver los registros de invocación de datos de usuario directamente en la consola.
Nota: La siguiente resolución es solo para RHEL 7, RHEL 8 y RHEL 9. Para obtener información sobre Amazon Linux 2 y Amazon Linux 2023, consulta ¿Cómo envío el resultado de los datos de usuario a los registros de la consola en una instancia de EC2 para Amazon Linux 1, Amazon Linux 2 o Amazon Linux 2023?
Resolución
Para enviar el resultado de los datos de usuario a los registros de la consola en una instancia de EC2 que ejecuta RHEL, sigue estos pasos:
-
Abre la consola de Amazon EC2.
-
Conéctate a una instancia existente o inicia una nueva. A continuación, usa SSH para conectarte a la instancia.
-
Edita la línea GRUB_CMDLINE_LINUX en /etc/default/grub y cambia «console=ttyS0,115200n8 console=tty0» a «console=tty1 console=ttyS0»:
RHEL 7
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
RHEL 8
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
RHEL 9
# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved
-
Para volver a crear el archivo /boot/grub2/grub.cfg, ejecuta el siguiente script:
RHEL 7
# grub2-mkconfig -o /boot/grub2/grub.cfgGenerating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1062.1.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.1.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-026767dbe06a4910a5ce3bd0def903c0
Found initrd image: /boot/initramfs-0-rescue-026767dbe06a4910a5ce3bd0def903c0.img
done
RHEL 8
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
RHEL 9
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
-
Detén la instancia.
-
(Opcional) Para ejecutar los datos de usuario cada vez que se reinicie la instancia, configura el script de datos de usuario y las directivas de cloud-init con un archivo MIME de varias partes.
Nota: De forma predeterminada, los scripts de datos de usuario y las directivas de cloud-init solo se ejecutan durante el primer ciclo de arranque del inicio de una instancia de EC2.
-
Para redirigir el resultado de los datos de usuario a la consola, ejecuta el siguiente comando para editar el campo de datos de usuario:
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
cat /etc/redhat-release
echo "Hello from user-data!"
--//--
Nota: El script para redirigir el resultado de los datos de usuario comienza con la línea #!/bin/bash -xe. El script anterior contiene datos de configuración de cloud-init que hacen que el script de shell se ejecute cada vez que se inicia la instancia. En el comando anterior, la línea siguiente redirige el resultado de los datos de usuario:
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
-
Inicia la instancia y, a continuación, ve el resultado del registro de la consola. Recibirás un resultado de la consola similar al del ejemplo siguiente:
RHEL 7
<13>May 21 03:11:44 user-data: + cat /etc/redhat-release
<13>May 21 03:11:44 user-data: Red Hat Enterprise Linux Server release 7.9 (Maipo)
<13>May 21 03:11:44 user-data: + echo 'Hello from user-data!'
<13>May 21 03:11:44 user-data: Hello from user-data!
RHEL 8
<13>May 21 03:11:21 user-data: + cat /etc/redhat-release
<13>May 21 03:11:21 user-data: Red Hat Enterprise Linux release 8.6 (Ootpa)
<13>May 21 03:11:21 user-data: + echo 'Hello from user-data!'
<13>May 21 03:11:21 user-data: Hello from user-data!
RHEL 9
<13>May 21 03:12:34 user-data: + cat /etc/redhat-release
<13>May 21 03:12:34 user-data: Red Hat Enterprise Linux release 9.3 (Plow)
<13>May 21 03:12:34 user-data: + echo 'Hello from user-data!'
<13>May 21 03:12:34 user-data: Hello from user-data!
Importante: Los datos de usuario están visibles en la consola. No incluyas información confidencial en los datos que envíes.
Información relacionada
Ejecutar comandos en la instancia de Linux durante el inicio