Test script if host is back online

2

1

E.g. system: Ubuntu/Debian.

As many of you do this probably via ping and a terminal, I always forget this terminal when switching to other task. So a notification pop-up would be useful. So can I do better as this?

while; do
  if ping -c 1 your.host.com; expr $? = 0; then
     notify-send "your.host.com back online"; sleep 30s;
  else
     sleep 30s;
  fi;
done

You will need zsh and libnotify to let the snippet work. As script:

#!/usr/bin/env zsh
while; do if ping -c 1 $1; expr $? = 0; then notify-send "$1 back online"; sleep 30s; else sleep 30s; fi; done

math

Posted 2010-10-15T07:21:11.833

Reputation: 2 376

Quick refactoring suggestion: make it a function which accepts the hostname/IP address as argument. – vtest – 2010-10-15T08:56:33.787

Answers

3

The idea looks right to me. By using while :; do ... you can make it portable to normal Bourne shells. The expr calls seems unnecessary. Also, you probably want to break out of the loop when the host is found.

while :; do
    if ping -c 1 $1; then
        notify-send "$1 back online"
        break
    fi
    sleep 30s
done

Peter Eisentraut

Posted 2010-10-15T07:21:11.833

Reputation: 6 330