首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行Getty错误消息

串行Getty错误消息
EN

Unix & Linux用户
提问于 2018-05-31 09:09:56
回答 3查看 11.4K关注 0票数 1

我有一个带有CentOS发行版的云服务器和一个Apache实例来管理一些web应用程序,比如Wordpress或PrestaShop。

我注意到日志文件(var/log/)中报告了一个错误。

  • 特别是在messages:5月30日11:54:41 xxx00962 systemd: Starting on ttyS0.5月30日11:54:41 xxx00962 systemd: Started on ttyS0。5月30日11:54:51 xxx00962系统:串行-getty@ttyS0服务暂停时间结束,调度重新启动。5月30日11:54:51 xxx00962系统:在ttyS0上停止串行访问。
  • secure:5月30日15:51:30 xxx00962 24693:/dev/ttyS0:非字符设备

其中xxx00962是(匿名的)主机名。

我不知道getty是干什么的,但我想解决这个问题。

有人能帮我解释getty是如何工作的吗?

EN

回答 3

Unix & Linux用户

发布于 2018-05-31 11:38:16

getty是最古老的Unix程序之一。您正在使用一个由Wietse,agetty编写的类似工作的程序,该程序是在getty大约20岁时编写的。

运行此程序是因为您的系统认为您有一个连接到串行设备的终端,其字符设备文件名为/dev/ttyS0。当您的系统引导时,一个名为systemd-getty-generator的程序在/sys/class/tty/console/active中看到了ttyS0,因为它是在内核命令行的console=后面列出的。生成器导致将serial-getty@.service模板服务单元实例化为serial-getty@ttyS0.service;这是您正在看到的试图记录其活动的服务。

该服务通过该设备提供终端登录。

由于某些原因(假设您有2014年或更高版本的systemd ),您的系统是不一致的,并且现在认为/dev/ttyS0不是字符设备文件,更不用说终端的字符设备了。systemd-getty-generator认为那是在引导。至少有两种方式可以改变这种情况。如果这两者都发生了,则不能从你的问题中确定。

修复/dev/ttyS0

  • 如果它应该是一个字符设备,但不是,那么在运行时找出是什么改变了它。
  • 如果它不应该是字符设备,那么当systemd-getty-generator检查它时,找出它为什么是引导端设备。也不要告诉它的命令行上的内核它是控制台。如果它不应该是一个字符设备,因为您没有一个串行端口(连接或没有终端),那么告诉内核一个不存在的串行端口就是控制台是完全错误的。
  • 如果它应该是一个字符设备,它是一个终端,但是您不希望能够从该终端登录,那么停止告诉它的命令行上的内核它是控制台。
  • 如果它应该是作为终端的字符设备,但您希望它是内核控制台,但仍然不希望能够从该终端(或者其他任何其他非虚拟终端控制台)登录,请禁用systemd-getty-generator,因为它的主要功能不是您想要的。

再读

票数 3
EN

Unix & Linux用户

发布于 2018-05-31 11:52:03

在任何Unix系统中,getty是一个进程的传统名称,该进程在串行端口连接(硬连接终端或调制解调器线路)上显示登录提示,并等待用户登录。

在现代(物理)系统中,通常可以发现getty进程在文本模式虚拟控制台(S)上提供登录提示。如果系统具有远程控制台访问硬件(如HP iLO、Sun/Oracle、Fujitsu或Oracle iDRAC),则它们通常提供通过远程控制台接口建立SSH连接可访问的虚拟串行端口,如果系统管理员只是为相应的串口设置getty进程。

这通常比使用使用Java或HTML5的基于web的远程控制台接口更可靠:由于虚拟串行端口不必模拟PC键盘,所以它不必将传入字符反向映射回键盘扫描代码,并希望服务器OS上实际配置的键盘布局与反向映射操作所用的键盘布局匹配。在输出端,它不需要尝试刮除视频RAM以获得可显示的图像。

在虚拟机上,虚拟串行端口可以以同样的方式使用,原因也是一样的:虚拟串口连接比“虚拟KVM”对数据的转换更少。

在您的具体案例中,云虚拟机OS显然被配置为期望虚拟串行端口为/dev/ttyS0,但它看起来似乎现在VM中不存在虚拟串行端口。也许云基础设施在VM初始化过程中使用了它?

您可能可以在getty上关闭/dev/ttyS0进程,因为它现在似乎没有做任何有用的事情。要做到这一点,这些命令可能是最简单的解决方案:

代码语言:javascript
复制
systemctl stop serial-getty@ttyS0.service
systemctl disable serial-getty@ttyS0.service

第一个命令告诉systemd停止尝试启动进程,直到下一个重新启动,第二个命令将持久地将其标记为禁用。

在使用第二个命令之前,可以通过重新启动系统来撤消第一个命令。因此,如果您不确定,只需使用第一个命令,并等待几天,看看它是否会导致任何问题。如果您发现您的VM现在是不可访问的,那么简单的重新启动就会将事情返回到以前的状态。

作为在JdeBP的回答中,您还应该检查引导选项:如果在其中列出了console=ttyS0systemd将在/dev/ttyS0上自动生成getty进程。

票数 1
EN

Unix & Linux用户

发布于 2020-06-24 08:25:50

我通过编辑/etc/systemd/journald.conf和设置

代码语言:javascript
复制
MaxLevelSyslog=warning
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/447070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档