无论是家用笔记本还是公司笔记本,远程定时开关机都是一个非常实用的功能,但平时却不太被重视。
我们公司拥有多台高性能GPU服务器,每台服务器的功率为2千瓦。 如果这些服务器持续运行一年,光电成本将是数万。
但是常年运行很容易加速硬件的老化。
而如果使用远程定时开关,至少可以节省一半的水费,还可以延长设备的使用寿命! 从大的方面说,是为国家节能降耗。 从小的方面来说,对公司来说也是增加了成本。 里里外外都是好东西!
定时开关机是一个非常简单实用的功能,跟着这篇文章不到10分钟就可以学会操作!
超级简单的定时关机方法
以Windows系统为例,只要在cmd命令行输入下面的shutdown命令,笔记本就会在设置的超时时间到后自动关机。
1# 其中-t后面的参数表示多少秒后开始关机
2shutdown -s -t 3600
在办公条件下,我推荐使用笔记本休眠。
与死机相比,休眠模式可以保存当前的笔记本环境,然后在上次开机后立即恢复到之前的办公环境,大大减少了你再次打开相关文件或软件的时间。
休眠功能可以直接通过开始菜单中的电源选项来完成,也可以使用关机命令来完成,如下:
1shutdown /h
配合at命令的休眠功能也可以实现定时执行。
比如我每天晚上6点上班,然后让Python执行一个40分钟左右的例行任务,然后让notebook休眠,这样我就可以每天晚上7点用下面的命令手动让notebook休眠没有让人等到7点钟再自动关机。
1at 19:00 /every:M,T,W,Th,F,S,Su "shutdown /h"
远程定时启动WakeonLAN
实现定时死机后,还得给笔记本设置闹钟,让它“早起按时工作”。 这就是远程定时开机功能。 “远程召唤”。
大概的过程是,当电脑设备处于休眠或死机状态时,显卡和网卡会保持微弱的供电,网卡仍然会窃听局域网发出的广播包,并进行分析。 数据包,让网卡通知显卡唤醒系统,恢复运行状态。
第一步检查网卡是否支持WOL功能
这个需要进入笔记本的BIOS设置,但是不同型号显卡的BIOS进入和设置方法有很大的不同,所以没有统一的方法。 是通过F2键访问的,有的是通过Esc键访问的,所以具体的BIOS还需要详细研究。
进入BIOS系统后,需要在界面的各个菜单或下拉选项中寻找与Remote WakeUp或WakeonLAN含义相近的选项(由于名称不固定统一,所以文字可以表达意思) .
一般在电源管理菜单下,但也有例外,需要仔细看。如果实在找不到,说明你的设备不支持WOL技术,换机时再换上次笔记本电脑。
哈哈。 如果找到,将选项设置为启用,保存 BIOS 设置并重新启动进入 Windows。
虽然现在的大部分笔记本电脑都支持这项技术,但只有少数不支持。 不同显卡的具体设置方法可以参考这篇文章:
第二步,设置网卡的WOL功能
打开控制面板,依次选择:查看网络状态和任务→更改适配器设置→物理网卡(网卡可能比较多,注意不要选错,一般选择Intel开头的,因为是实际的有线化学网卡)。
之后,右击选中的化学网卡,选择属性定时关机软件,弹出以太网属性设置窗口,然后点击配置按钮,进入网卡属性设置窗口,将magic packet的属性值设置为中间面板的底部以启用:
然后勾选电源管理面板中的允许此设备唤醒计算机选项:
完成以上操作后,记录下网卡的MAC地址(也称为网卡的数学地址),为下一步做准备:
操作方法是双击昨天的数学网卡,弹出以太网状态窗口,点击详细信息,即可看到网卡对应的MAC地址,Ctrl+c复制出来。
第三步远程发送魔法包唤起机器
这一步虽然可以在一些路由器、电脑软件、手机APP中实现,但不是很灵活,所以这里提供一种通过Python程序实现的方式,也方便大家在我的代码。 或者提高它。
首先确保每台要唤醒的笔记本电源都已打开,其中一台正在运行并已联网。
笔记本资源有限的朋友可以参考我们之前的文章通过安卓手机配置Python环境。
将这台笔记本电脑作为集中控制器使用,因为它会统一向其他笔记本电脑发送魔法数据包。 详细代码如下,脚本名为wol.py,只需要修改添加MAC地址列表即可正常使用。
1# 导入所需模块
2import socket, binascii
3
4# 所有要远程定时开机电脑的MAC地址列表,注意要去掉MAC地址中的 - 符号
5pc_mac_list = ['A08000000365',
6 'A08000000365',
7 'A08000000366',
8 'A08000000367',
9 'A08000000368',
10 'A08000000369',
11 'A08000000370']
12
13def create_magic_packet(mac):
14 """
15 根据目标主机的MAC地址创建一个魔法数据包
16 """
17 data = 'FF' * 6 + mac * 16
18 send_data = binascii.unhexlify(data)
19 return send_data
20
21def send_magic_packet(send_data):
22 """
23 通过socket向目标主机广播魔法数据包
24 """
25 broadcast_address = '255.255.255.255'
26 port = 9
27 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
28 s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
29 s.sendto(send_data, (broadcast_address, port))
30
31if __name__ == '__main__':
32 # 遍历MAC地址列表,分别构造和发送魔法数据包
33 for i in pc_mac_list:
34 send_data = create_magic_packet(i)
35 send_magic_packet(send_data)
36 print('向%s主机发送魔法唤醒包成功,请稍等片刻后查看主机是否开启!' % i)
最后,我们将 wol.py 部署到集中控制器。 假设我们每天晚上9点下班,那么我们可以使用crontab设置每天早上8:30远程开机。 对应的crontab设置如下,可以参考:
1 30 8 * * * python3 wol.py
另外,如果有条件,可以配合远程Jupyter工具使用定时关机软件,实现在家随时远程开关机,疗效更佳。
对Jupyter感兴趣的朋友欢迎在留言区留言,有机会我会详细介绍给大家