One of the essential tasks for developers and sysadmin is to get an alert notification about failed services or running out of disk space and other critical failures. Let us see how to send or push a direct message to a mobile device powered by Apple iOS or Google Android phone.

How to push/send message to iOS and Android in real time

We can use the AWS SNS push notification service to send an alert directly to an application on a mobile device. However, today I am going to use straightforward app service called Pushover. It is a simple app to get real-time notifications on Android, iPhone, iPad, and Desktop, including Android Wear and Apple Watch.

Why send notifications?

As an independent developer and Linux sysadmin, I needed a simple way to get a notification for my side projects using API. I can get a notification for failed backups or my Nginx service overloaded due to problems or MySQL read-only replica running out of sync. My search ended with Pushover. However, it is not a free service. To use Pushover for yourself or a small group, it’s just a USD $5 one-time purchase on each platform. You can send 7,500 messages per month, which is more than sufficient for my needs. They also have an option to send messages for a group of developers and IT teams. My criteria were simple:

  1. I needed support for my Perl, Python, and bash/shell scripts.
  2. Must push notification to iPhone.
  3. Must not be very expensive.

The Pushover service seems to fit all my requirements. Enough talk, let’s get our hands-on dirty with some examples.

Step 1 – Sign up for Pushover

First download Pushover device clients:

  • Android version
  • iOS (iPhone, iPod Touch, and iPad) version

Make sure you subscribe to service or get a seven-day trial account. Once logged in, register your cli application, set its name, and get an API token in return.

Step 2 – Create a shell script wrapper API script

Create a new shell script as follows:
$ vi ~/bin/
Append the code:

#!/usr/bin/env bash
# push/send message ios and android using API from my Linux box
# Set API stuff 
# Bash function to push notification to my iPhone 
# yes you can push/send message android too using the same function
	local t="${1:cli-app}"
	local m="$2"
	[[ "$m" != "" ]] && curl -s \
	  --form-string "token=${_token}" \
	  --form-string "user=${_user}" \
	  --form-string "title=$t" \
	  --form-string "message=$m" \

Next, use the source command:
$ source ~/bin/
Test it:
$ push_to_mobile "bash-notification" "This is a test. Job foo failed on $HOSTNAME @ $(date)"
Immediately I will get a notification on my phone:

Shell sent push notifications to my iPhone from Linux command line

How to Send both email and push notifications to your phone from script

We can simple use the sendmail command or mail command as follows from our shell scripts:

#!/usr/bin/bin bash
# Wrapper by Vivek Gite under GPL v2.0+
# ------------------------------------------------------- 
# Set email stuff
# warning: must need pre-configured smtpd such as sendmail/postfix
subject="rsnapshot backup job failed at $HOSTNAME"
from="[email protected]"
to="[email protected]"
# start daily backup and set log to ${log_file}
# all reports created by script including ERROR
/usr/bin/rsnapshot daily 2>&1 | /root/bin/ > "${log_file}"
# Catch errors 
alogs="$(egrep -w '^ERROR:|ERROR' $log_file)"
# If failed, notify using both email and push message to my phone
if [ $status -ne 0 ] ||  [ "$alogs" != "" ];
   mail -A "$log_file" -s "$subject" -r "$from" "$to" <<< "Backup script failed with error. Check attached log file"
   # Push/send message to iOS and Android using Pushover API too
   source ~/bin/
   push_to_mobile "backup-script" "$subject. See $to email for detailed failed log." >/dev/null