Rab*_*bid 5 windows nas ubuntu-server dd-wrt
当用户访问NAS时,我正试图让我的NAS服务器从S3睡眠状态唤醒.我想这样做是为了延长服务器的使用寿命,并限制其功耗.我见过有人要求提供类似的建议,但我发现没有提供强大的解决方案,大多数线程都没有得到答复.
所以要快速详细说明我的问题:在我的家里,我有一个定制的,来自旧的PC,NAS服务器,运行Ubuntu服务器,主要存储媒体和文档.此服务器当前设置为在预定义的非活动时段后休眠.目前,NAS可以通过WOL魔术包带出S3状态.我想要实现的是当用户从他们的PC访问其中一个共享时,这个魔术包会自动发送到服务器.用户主要运行Windows 7.我不确定这是否完全普及,但我有一台运行DD-WRT的Linksys WRT54G作为我的家用路由器/ DHCP/DNS.
在我的研究过程中,我遇到了许多文章,这些文章只是在定时循环中自动唤醒服务器,没有真正的情报.下面给出的文章似乎做我想要的:
http://wdtvhd.com/index.php?showtopic=7908
给出了一个脚本,它尝试通过使用DD-WRT路由器在进行查询时发送wake-on-lan数据包来解决此问题.这似乎是一个很好的方法,但我无法让链接中给出的脚本正常运行.
我认为这涵盖了我的问题的大多数方面.任何帮助将不胜感激.
只是想我会发布我对上述问题的最终解决方案。为了解决这个问题,我编写了一个自定义脚本,该脚本在我的 dd-wrt 路由器上的定时 cron 作业上运行。当此脚本运行时,它会访问该文件
\proc\net\arp
Run Code Online (Sandbox Code Playgroud)
该文件中存储了所有当前租用的 IP 地址和相应的 MAC 地址的记录。因此,我的脚本将该文件中存储的 MAC 地址与家庭网络上 PC 的预定义 MAC 地址列表进行比较。该列表仅包含我希望能够访问 NAS 服务器的 PC。如果发现其中一台 PC 具有有效租约,则路由器将发送 LAN 唤醒魔术数据包。然后唤醒服务器。那时我以为我已经实现了我的目标,因为服务器与网络上的任何 PC 都已打开,并且等待时间并不太长。然而,完成此操作后,我发现服务器的定时睡眠将每 30 分钟左右启动一次,并且服务器睡眠后只会在几秒钟后再次被唤醒。
因此,为了解决这个问题,我只是在条件语句中添加了另一个条件,如果所需的 PC 都没有有效租约,则服务器将休眠。为此,我使用 SSH 和 DD-WRT 内置的 dropbear ssh 功能来使服务器休眠。下面是脚本
#!/bin/ash
NAS="MA:CA:DD:RE:SS:00"
PC="MA:CA:DD:RE:SS:00"
varP='grep -o $PC /proc/net/arp'
while true
do
echo 'Entered Loop'
if ping -c 1 IPADDRESSOFNAS > /dev/null; then
echo 'NAS is Already ON'
if [[ "$varP" != "MA:CA:DD:RE:SS:00" ]]; then
echo 'All Hosts Offline'
echo IPADDRESSOFNAS ssh-rsa NASPUPLICKEY
#HOME=/temp/root/
DROPBEAR_PASSWORD='NASPASSWORD' ssh root@IPADDRESSOFNAS pm-suspend &
fi
exit
fi
if [[ "$varP" == "MA:CA:DD:RE:SS:00" ]]; then
echo 'waking from lan'
/usr/sbin/wol -i BROADCASTADDRESSOFNETORK -p 9 MA:CA:DD:RE:SS:00
/usr/sbin/wol -i BROADCASTADDRESSOFNETORK -p 9 MA:CA:DD:RE:SS:00
exit
fi
exit
done
Run Code Online (Sandbox Code Playgroud)
免责声明:代码按原样提供。我知道这并不漂亮,也不是最好的解决方案。但这对我有用,这就是我真正需要的。
希望有人觉得这很有用!
| 归档时间: |
|
| 查看次数: |
7575 次 |
| 最近记录: |