我有一个带有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是如何工作的吗?
发布于 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,因为它的主要功能不是您想要的。systemd-getty-generator。系统手册页。freedesktop.org。agetty。Ubuntu 15.04手册页。发布于 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进程,因为它现在似乎没有做任何有用的事情。要做到这一点,这些命令可能是最简单的解决方案:
systemctl stop serial-getty@ttyS0.service
systemctl disable serial-getty@ttyS0.service第一个命令告诉systemd停止尝试启动进程,直到下一个重新启动,第二个命令将持久地将其标记为禁用。
在使用第二个命令之前,可以通过重新启动系统来撤消第一个命令。因此,如果您不确定,只需使用第一个命令,并等待几天,看看它是否会导致任何问题。如果您发现您的VM现在是不可访问的,那么简单的重新启动就会将事情返回到以前的状态。
作为在JdeBP的回答中,您还应该检查引导选项:如果在其中列出了console=ttyS0,systemd将在/dev/ttyS0上自动生成getty进程。
发布于 2020-06-24 08:25:50
我通过编辑/etc/systemd/journald.conf和设置
MaxLevelSyslog=warninghttps://unix.stackexchange.com/questions/447070
复制相似问题