ฉันตัดสินใจว่าฉันต้องการทางออกเพื่อปลุกเซิร์ฟเวอร์สื่อของฉันโดยอัตโนมัติเมื่อเข้าถึงซึ่งไม่ได้ขึ้นอยู่กับ dd-wrt
ฉันมีราสเบอร์รี่ปี่ดังนั้นฉันจึงใช้มันเพราะมันใช้พลังงานต่ำและฉันก็ไม่รังเกียจที่จะเก็บมันไว้ตลอดเวลาแน่นอนว่ามันสามารถทำงานได้จากเครื่องลินุกซ์
ทางออกสุดท้ายที่ฉันพบสำหรับตัวเองคือการเขียนสคริปต์ทุบตีเล็ก ๆ น้อย ๆ ราสเบอร์รี่ - pi พึ่งพา etherwake และ tcpdump ทั้งสองไม่ได้ติดตั้งโดยค่าเริ่มต้นใน rasbian นอกจากนี้บนเซิร์ฟเวอร์ Wake On Lan จะต้องเปิดใช้งานตามที่ระบุไว้ในโพสต์อื่น ๆ
sudo apt-get install etherwake
sudo apt-get install tcpdump
สคริปต์การปลุกมีดังต่อไปนี้:
nano ~/wol.sh
แล้ว:
#!/bin/bash
pingInterval=60 #time interval, in seconds, between checks that the server is still awake.
target=192.168.x.x #WOL target ip address
targetMAC=00:11:22:33:44:55 #WOL target MAC
wake () {
tcpdump -i eth0 -c 1 -p host $target
etherwake $targetMAC
#echo WOL sent to $target at $targetMAC
return
}
while sleep $pingInterval; do
varPing=`ping -s 1 -c 2 $target > /dev/null; echo $?`
if [ $varPing -eq 0 ]; then
#echo ping success
else
#echo ping fail
wake
fi
done
แนวคิดหลักก็คือมันรันจาก raspberry-pi ของฉันซึ่งจะปลุกเซิร์ฟเวอร์ถ้าสังเกตเห็น arp ร้องขอเพียงครั้งเดียวสำหรับเซิร์ฟเวอร์ ถ้าเซิร์ฟเวอร์ตื่นแล้วจะไม่ฟังคำขอ arp แต่ส่ง Ping ไม่กี่ครั้งในตอนนี้เพื่อให้แน่ใจว่ามันยังคงทำงานอยู่
ฉันตั้งชื่อไฟล์ wol.sh และทำให้สามารถเรียกใช้งานได้ จากนั้นวางไว้ใน sudo crontab เพื่อเปิด @reboot เป็นรูท นี่สำหรับ tcpdump ซึ่งต้องการการเข้าถึงระดับสูงเพื่อฟัง eth0 และ etherwake
sudo chmod +x /home/pi/wol.sh
sudo crontab -e
เพิ่มลงในด้านล่าง
@reboot sh /home/pi/wol.sh > /dev/null