Page 1 of 1

WOL NAS on RPI startup

PostPosted: 12 Mar 2019, 10:22
by chrichri
Hi there,

I would like to wake up my NAS when my RuneAudio Raspberry boots.

What I did so far:

- installed wol on RPI
- wake up NAS from commanline works:

Code: Select all
===============  RuneOS distribution  ===============
  ____                      _             _ _       
 |  _ \ _   _ _ __   ___   / \  _   _  __| (_) ___ 
 | |_) | | | | '_ \ / _ \ / _ \| | | |/ _` | |/ _ \
 |  _ <| |_| | | | |  __// ___ \ |_| | (_| | | (_) |
 |_| \_\\__,_|_| |_|\___/_/   \_\__,_|\__,_|_|\___/
================  ================
RuneOs: Experimental Beta 0.5 20180903
RuneUI: 0.5b (gearhead)
Hw-env: RaspberryPi 2 / 3

root@runeaudio(rw):~# wol 00:11:32:3B:2C:D0
Waking up 00:11:32:3B:2C:D0...
root@runeaudio(rw):~# ping
PING ( 56(84) bytes of data.
64 bytes from icmp_seq=1 ttl=64 time=0.829 ms
64 bytes from icmp_seq=2 ttl=64 time=0.387 ms
--- ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1068ms
rtt min/avg/max/mdev = 0.387/0.608/0.829/0.221 ms

- added command to /var/www/command/rune_SY_wkr as follows (see line 58):
Code: Select all
  53 // Connect to Redis backend
  54 $redis = new Redis();
  55 $redis->connect('/run/redis.sock');
  57 // wake on lan NAS
  58 sysCmd('wol 00:11:32:3B:2C:D0');
  60 // if os updates are needed
  61 if (file_exists('/srv/http/command/update_os.php')) {
  62     include '/srv/http/command/update_os.php';
  63     updateOS($redis);
  64 }

Unfortunately the NAS does not boot when booting the RPI....any hints what I might do wrong?

Thank you in advance. Here is my complete debug info:


Re: WOL NAS on RPI startup

PostPosted: 12 Mar 2019, 13:25
by janui
Hi chrichri,
chrichri wrote:…I would like to wake up my NAS when my RuneAudio Raspberry boots...
Your changes look fine. How long does it take for the NAS to become available after the wol? Is it possible that the NAS has not yet fully started when Rune attempts to mount it?
If it fails on the first attempt Rune will attempt to mount the NAS again after about 15 minutes. Could you check if it is mounted after waiting for 15 mins or so?
If it mounts after waiting 15 mins you can change this line in /var/www/command/rune_SY_wkr to a value in half seconds which your NAS needs to become available:
Code: Select all
$savecpu_mnt = 1;
So say it takes 60 seconds for the NAS to start, use a value of 70 or so for a bit of leeway, double it giving 140 half seconds. It should look like this:
Code: Select all
$savecpu_mnt = 140;
It will then wake up and mount the NAS in the shortest possible time. If the NAS is already up it will mount immediately without waiting.

Re: WOL NAS on RPI startup

PostPosted: 13 Mar 2019, 10:35
by chrichri
Hello janui,

thanks for the reply. Unfortunately this is not a mounting issue. The NAS does not boot when launching the RPI, however it boots when manually sending the wol request in the ssh console.

The problem seems to be the following: My router which is running the DHCP server is not the fastest one. It takes a few seconds until IP adresses are assigned to the clients (even though the IP is always the same, static IPs are defined for NAS and RPI in the router's DHCP configuration).

When I add a sleep command before the wol request

Code: Select all
  57 // wake on lan NAS
  58 sleep(60);
  59 sysCmd('wol 00:11:32:3B:2C:D0');

the WOL request works. But of course boot time is delayed. I will try to find the minimum possible sleep time...

A more elegant way would be to check if an IP adress is assigned before the WOL request. Something like this:

Code: Select all
continue = false
do {
    if (IP assigned) {
        sysCmd('wol 00:11:32:3B:2C:D0');
        continue = true;
} while (continue==false);

I have little php experience though...what would be the best way to check the IP assignment?

Best regards

Re: WOL NAS on RPI startup

PostPosted: 13 Mar 2019, 23:24
by janui
Edit: post deleted 15-03-2019

Re: WOL NAS on RPI startup

PostPosted: 15 Mar 2019, 14:40
by janui
Hi chrichri,
I have deleted my previous post as it is not really a good way to integrate a call to wol. I also have suspicions that it would not work correctly.
As a better solution I suggest you create a file called /usr/lib/systemd/system/wol.service, with this content:
Code: Select all
# This file name: /usr/lib/systemd/system/wol.service (-rw-r--r-- 1 root root)
# Wake on lan request for NAS after routable network connection established
# In order for to work it needs systemd-networkd.service to be active
# File permissions set with: chown root.root /usr/lib/systemd/system/wol.service ; chmod 644 /usr/lib/systemd/system/wol.service
# Enable with: systemclt enable systemd-networkd wol
# Disable with: systemclt disable systemd-networkd wol
Description = (WOL) Wake on Lan request for NAS
ExecStart=/usr/bin/wol 00:11:32:3B:2C:D0
After creating it run these commands:
Code: Select all
chown root.root /usr/lib/systemd/system/wol.service
chmod 644 /usr/lib/systemd/system/wol.service
systemctl daemon-reload
systemctl enable systemd-networkd wol
Then reboot.
You can check that it has worked by running this command:
Code: Select all
journalctl | grep -i -E 'reached|wol'

Re: WOL NAS on RPI startup

PostPosted: 16 Mar 2019, 11:21
by chrichri
Hello janui,

works like a charm! And this definitely a more elegant and reliable way!

There is one little disadvantage: It takes ~30s longer to wake up the NAS after RPI boot compared to the entry in rune_SY_wrk combined with a sleep(15) command. Seems like the network is up before the target "network is online" is reached...

Anyway, I will stick with this solution as this is the more reliable way. Thanks again janui for your support and have a nice weekend!

Best regards