通过串口关闭Linux服务器-阿里云开发者社区

开发者社区> 技术小甜> 正文

通过串口关闭Linux服务器

简介:
+关注继续查看
简介 

一个真正的服务器一般往往不需要连接键盘、显示器或鼠标等外设。而仅仅需要一个性能稳定的操作系统如Linux和一个网卡。诸如鼠标、键盘等外部设备则往往不必要连接。在运行Linux的机器上,通过网络进行远程管理是最好和最方便的解决方法。 

在买服务器时应该确保在开机BIOS中有设定不需要检测键盘的选项。目前市场上大多数主板厂商的BIOS版本都有这样的选项。但是仍然有一些主板认为自己的的服务器将只运行windows,因此一定会在启动时需要一个键盘,因此不推荐使用这种机器作为服务器使用。 

没有键盘和监视器的计算机非常适合于作为防火墙、web服务器、NFS服务器、邮件服务器的、ADSL网关、DNS服务器的概念等等。而且该机器不一定是功能非常强大的机器。即使一个老的Pentimu100机器,只要拥有足够的内存就可以同时服务数百个客户服务请求。 

服务器不连接键盘、鼠标和显示器的好处是非常方便,因为服务器将只是一个简单的主机箱,可以放在任何适合的地方。但有时候你可能希望能有一个按键来实现安全的关闭服务器而无需首先远程登录服务器运行shutdown命令来实现关闭机器。也可能你现在就在服务器机房,而最近的工作站离你有100多米远;或者你希望某个没有root密码的普通用户关闭服务器。当然直接关闭电源并不是一个好的想法,因为这样可能导致丢失数据并且在下次启动时需要很长时间的文件系统检测。 

解决方法是按照本文的方法安装一个很小的、便宜的串口设备实现安全关机。 

设备 

我们将制作一个小小的、由两个LED和一个按键式开关组成的设备。其中绿色的LED亮表示当前按键式开关是处于激活状态,缓慢闪烁的黄色LED灯表示服务器正在启动或者仍然处于关闭状态。为了实现安全关闭服务器需要持续按下开关3秒钟。 
如果你按了按键开关,亮着的绿色的LED将熄灭,表示正在关机,这时候命令"/sbin/shutdown -t2 -h now"被执行。在服务器关闭过程中黄色的LED将连续闪烁以进行指示。当黄色LED不再闪烁时,你仍然需要等待10秒钟才能关闭服务器电源。当所有的进程被杀掉,磁盘被卸载以后黄色LED将不再闪烁。若你的服务器支持自动关机则你不需要考虑10秒的等待时间,因为服务器会自动关闭电源。 

串口 



关于串口令人感兴趣的是我们可以通过ioctl系统调用来控制其中的几个管脚。这意味着你不需要修改任何内核代码就可以控制连接到串口的LED或这读取按键式开关的状态。串口有足够的电压来驱动两个低电压LED。我们将使用RTS和DTR针来连接LED,并且"Carrier Detect line"被用来读取按键开关的状态。 

串口母头连接器的管脚定义: 

9 PIN-connector 25 PIN-connector Name Dir Description 
1 8 CD input Carrier Detect 
2 3 RXD input Receive Data 
3 2 TXD output Transmit Data 
4 20 DTR output Data Terminal Ready 
5 7 GND -- System Ground 
6 6 DSR input Data Set Ready 
7 4 RTS output Request to Send 
8 5 CTS input Clear to Send 
9 22 RI input Ring Indicator 

电路 

用户需要下面元器件来制作这个串口关机设备: 

1 绿色低电压LED (一个普通LED同样可以工作,但是亮灯过低) 
1 黄色低电压LED 
2 1.5K欧姆的电阻 
1 6.8K欧姆的电阻 
1 小按键开关 
1 串口母头连接器 
这些元器件按照如下的电路图连接在一起。串口电压范围是+/- 10伏特。1.5K电阻适合于低电压的LED,但是普通LED同样适合。不推荐修改电阻器电压和使用外部电源,因为串口控制芯片是主板的一部分,一旦你烧了其中的芯片,你只有修改整个主板。 

 
 


上图是实际的电路板样品图。最后的设备如文章开始图片所示。 

软件 

软件部分是一个小的守护进程。它可以通过/etc/rc.d/rc3.d/的脚本被启动。它通过使用ioctl(fd, TIOCMSET,...)和ioctl(fd, TIOCMGET, ...)函数来读取和写串口。你可以从这里下载程序。软件中包含一个Makefile和安装指示。
















本文转自starger51CTO博客,原文链接: http://blog.51cto.com/starger/18521,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux 下 Oracle随系统自动启动和关闭
Linux 下实现Oracle随系统自动启动和关闭 实现如下目的:     a、实现开启oracle实例自启动     b、关闭操作系统或重启操作系统前能够正常关闭Oracle数据库 a、实现系统启动oracle实例自启动步骤: 1...
790 0
如何关闭Linux里边的selinux ?
原文地址: http://jingyan.baidu.com/article/6d704a131ba67828da51ca73.html 有很多的Linux使用者因为对selinux不熟悉,所以都会将它关闭,避免影响到其它服务的使用,下面小编与大家分享一下如何关闭selinux,希望对大家有所帮助。
729 0
跨库查询(OpenDataSource)与链接服务器(Linking Server)
一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you only need to access the remote server's data once...
674 0
TP-Link路由器端口映射8081端口的Nexus服务外网无法访问的解决办法
TP-Link路由器端口映射8081端口的Nexus服务外网无法访问的解决办法 环境描述: 路由器:TP-Link TL-R478G+ 内网服务器信息: IP:192.168.1.221 系统:CentOS 6.5 服务:Nexus 端口:8081 映射方法: 问题描述: 其它服务器的服务通过此映射方法通过外网IP都可以访问了,但唯独这个不行,映射的时候尝试换了多个端口也无济于事。
1100 0
通过刷bios的方式在win8.1平板上启动windows phone模拟器
         最近买了个Windows8.1平板电脑,不是Surface Pro,太贵,而是国产的乐凡F2(64G、4G内存),CPU是赛扬U1037。
1056 0
阿里云 PrivateLink私网连接服务全网发布
私网连接(PrivateLink)能够帮助您在阿里云 VPC 中通过私有网络,安全稳定的访问部署在其它 VPC 中的服务,大幅简化网络架构,同时避免通过公网访问服务带来的安全风险。欢迎使用PrivateLink构建安全、高校、便捷的云上私网。
267 0
全志 A64 linux 通过设备树写LED驱动(附参考代码)
开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB详细参数 https://m.tb.cn/h.3wMaSKm开发板交流群 641395230 全志A64设备树结构体 #include <linux/of.
2490 0
linux后台运行和关闭、查看后台任务
fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令 一、& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
863 0
+关注
6720
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载