实验室有一台作为打印服务器的破电脑,系统XP。可是大家晚上回去时经常忘记关机,有时开上好几天。只是作为打印用,也就是白天有人用时才开吧,没必要提供7x24这样的服务吧。一天我在我的寝室的Debian机上装了个iptux玩。这个软件的优点就是可以添加其他网段的邻居,我就把我们实验室的网段加上了。结果发现都快0:00了机子上的飞鸽(UM2010)还是在线,这样说他们又没有关机了,又要白白的浪费电了。能不能实现远程关机,这时我并没有想用常规的远程关机,我想自己借助飞鸽这个平台加上一些自己写的脚本实现该功能。
其实思路很简单,每当飞鸽收到信息时,会有日志文件记录所有的通信内容。如果我在该机子上一直检测这个日志文件,那么当检测到被定义为关机命令的字符串时就关机,这样就可以了。
1 @echo off
2
3 cd C:\UMFG\UMData
4
5 del UM.Mdb
6
7 start C:\\UMFG\\UM.exe
8
9 ping -n 5 127.0.0.1 >NUL 2>NUL
10
11
12 :again
13
14
15 findstr shutdown UM.Mdb >nul && shutdown -s -t 3
16
17 findstr reboot UM.Mdb >nul && shutdown -r -t 3
18
19 ping -n 5 127.0.0.1 >NUL 2>NUL
20
21
22 goto again
该脚本首先是删除旧数据文件,然后启动飞鸽程序,ping相关的命令是延时用的,查找用的是系统的findstr。由于对bat脚本不熟,原以为findstr会返回某个布尔值,想不到查了半天原来是用&&来实现判断执行。这样把该脚本添加加在开机启动中,以后在别处用飞鸽看到该机器在运行时就可以将其shutdown或者reboot。
不过脚本运行后一直会有一个CMD黑屏的窗口在等待,很不爽,最后在网上找到了可以将其调用写在vbs文件中,这样就安静多了。
1 createobject("wscript.shell").run "C:\UMFG\UMData\halt.bat",0
最终将该vbs文件添加到注册表的启动项里面就可以了。
不过这种方法,实在不怎么美,听同学说操作系统中有进程这东西专门用来应对外来的响应,我对操作系统也不懂。不过单片机也有两种应对外面响应的,一种就是类似该例中的一直循环不断判断,另一种就是中断了,应该就是类似与服务和进程这东西了。
最后,bat真的没法和Linux的shell比,bat脚本太丑陋了。
