不愧是我,短短10分鐘就為公司省下了幾萬塊 ( ー̀◡ー́ )

無論家用電腦還是公司的電腦,遠程定時開關機都是一個非常實用的功能,只是一般都不太受關注。

我們公司有幾臺高性能的GPU服務器,每臺服務器的功率為2千瓦,這幾臺服務器持續運行一年,光電費就得大幾萬

而且長期運行容易加速硬件老化

但是用了遠程定時開關機的話,起碼能省下一半的電費,也延長了設備的使用壽命!往大了說這是為國家節能減排,往小了說也是為公司降低成本,裡外裡都是一件好事!


定時開關機是個非常簡單又實用的功能,跟著本文用不了10分鐘你就能學會如何進行操作!

超簡單的定時關機方法

以Windows系統為例,只要在 cmd 命令行中輸入下面的 shutdown 命令,在等到設定的超時時間到了之後電腦就會自動關機。

<code># 其中-t後面的參數表示多少秒後開始關機            
shutdown -s -t 3600/<code>

在辦公條件下,我更推薦使用電腦休眠

相比於關機,休眠模式能保存當前的電腦環境,從而在下次開機後能夠瞬間恢復之前的辦公環境,大大減少了大家再次打開相關文件或軟件的時間。

休眠功能即可以直接通過開始菜單裡的電源選項完成,也可以使用 shutdown 命令來完成,如下:

<code>shutdown /h/<code>

配合著 at 命令休眠功能也能實現定時執行。

例如我每天晚上6點下班,接著會讓Python執行一段約40分鐘的例行任務,然後再休眠電腦,那麼我就可以使用下面的命令讓電腦每天晚上7點鐘自動準時休眠,而不用讓人等到7點鐘再手動關機啦。

<code>at 19:00 /every:M,T,W,Th,F,S,Su "shutdown /h"/<code>

遠程定時開機 Wake on LAN

實現了定時關機之後,還得給電腦定個鬧鐘,讓它“按時起床工作”,這就是遠程定時開機功能,主要技術原理是: Wake on LAN技術 (簡稱WOL),中文叫做“網絡喚醒”或者“遠端喚醒”。

大概過程就是計算機設備在休眠或關機時主板和網卡上還會保持微弱的供電,網卡仍然會監聽局域網內發來的廣播包,並對其進行解析,解析後如果發現是符合協議的本機魔法數據包,那麼網卡就會通知主板進行系統喚醒,恢復運行狀態。

  • 三個步驟實現WOL

第一步 查看網卡是否支持WOL功能

這需要進入到電腦的 BIOS 設置裡面,不過不同型號主板的 BIOS 進入和設置方式是千差萬別的,所以沒有統一的方式,比如有的電腦 BIOS 是在開機時通過 Del 鍵進入的,有的是通過 F2 鍵進入的,還有的是通過 Esc 鍵進入的,所以具體的 BIOS 要具體的研究。

在進入到 BIOS 系統之後,就得在界面上的各種菜單或下拉選項中尋找具有類似 Remote Wake Up 或 Wake on LAN 含義的選項(因為名字並不固定統一,所以詞能達意就中了)。

一般情況是在電源管理菜單下,但也有例外,所以需要仔細查找。如果實在找不到的話,說明你的設備不支持WOL技術,等下次換電腦的時候換個好的吧

哈哈。如果找到了,就將選項設置為啟用,保存 BIOS 設置並重啟進入Windows系統。

其實現在的電腦大部分都是支持這個技術的,不支持的是少數,不同主板的具體設置方式可參考這篇文章進行:http://service.oray.com/question/1331.html

第二步 設置網卡的WOL功能

打開 控制面板 ,依次選擇: 查看網絡狀態和任務 → 更改適配器設置 → 物理網卡 (網卡可能比較多,注意不要選錯了,一般選擇那個Intel開頭的,因為它是實際的有線物理網卡)。

然後 右鍵 所選物理網卡,選擇 屬性 ,彈出 以太網屬性設置窗口 ,再點擊 配置 按鈕進入 網絡適配器屬性設置窗口 ,將 高級 面板下面的 喚醒魔包 屬性值設置為 啟用

不愧是我,短短10分鐘就為公司省下了幾萬塊 ( ー̀◡ー́ )

再將電源管理面板中的允許此設備喚醒計算機選項勾選

不愧是我,短短10分鐘就為公司省下了幾萬塊 ( ー̀◡ー́ )

完成上述操作之後,還要記錄下網卡的MAC地址(也稱為網卡的物理地址)以備下一步使用:

操作方法就是雙擊剛才的物理網卡,彈出以太網狀態窗口,點擊其中的詳細信息,那麼就可以看到網卡對應的MAC地址了,Ctrl+c複製下來就可以了。


不愧是我,短短10分鐘就為公司省下了幾萬塊 ( ー̀◡ー́ )


第三步 遠程發送魔法數據包喚醒機器

這一步在一些路由器、電腦軟件、手機APP中其實是可以實現的,但不是太靈活,所以這裡教大家一個通過Python程序來實現的方法,這樣也方便大家在我代碼的基礎上進行定製化擴展或者增強。

首先,保證要喚醒的各個電腦電源都是開著的狀態,並且保證其中一臺是運行且聯網的狀態。

電腦資源緊張的同學,可以參考我們之前的文章 《在手機上裝Python》 通過安卓手機配置Python環境。

將這臺電腦作為集中控制器,因為要由它來統一往別的電腦發送魔法數據包。詳細的代碼如下,腳本名為wol.py,大家只要修改和添加MAC地址列表中的就可以正常使用了。

<code> # 導入所需模塊 

import socket, binascii

# 所有要遠程定時開機電腦的MAC地址列表,注意要去掉MAC地址中的 - 符號
pc_mac_list = ['A08000000365',
'A08000000365',
'A08000000366',
'A08000000367',
'A08000000368',
'A08000000369',
'A08000000370']

def create_magic_packet(mac):
"""
根據目標主機的MAC地址創建一個魔法數據包
"""
data = 'FF' * 6 + mac * 16
send_data = binascii.unhexlify(data)
return send_data

def send_magic_packet(send_data):
"""
通過socket向目標主機廣播魔法數據包
"""
broadcast_address = '255.255.255.255'
port = 9
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(send_data, (broadcast_address, port))

if __name__ == '__main__':
# 遍歷MAC地址列表,分別構造和發送魔法數據包
for i in pc_mac_list:
send_data = create_magic_packet(i)
send_magic_packet(send_data)
print('向%s主機發送魔法喚醒包成功,請稍等片刻後查看主機是否開啟!' % i)/<code>

最後我們將wol.py部署到集中控制器上,假設我們每天早上9點上班,那麼我們就可以使用 crontab 設置每天早上8:30執行遠程開機,對應的 crontab 設置如下,大家可以參考:

<code>  30 8 * * * python3 wol.py/<code>

更進一步,如果有條件的話,結合遠程Jupyter工具一起使用,能夠實現隨時在家遠程開關機,效果更佳頂呱呱。

Jupyter 感興趣的同學歡迎在留言區留言,有機會將向大家詳細介紹


本文作者:博海,一個沉迷於技術並且追求藝術的pythoner,歡迎與我交流(微信號:bohy_i)。


分享到:


相關文章: