Did your regular backup finish?

Did your scheduled job run?

How do you know?

TL;DR: passively monitors your services and regular tasks. It does not probe your servers but rather waits for your program to PING JOE. You will receive an e-mail whenever your app misses the ping.

Q: I have a reliable backup tool with error reporting already. Why do I need ?

A: is the best solution to cover scenarios like your backup tool failing or not running at all, whole range of network issues, backup server down, cron daemon issues, and more. PINGJOE awaits an OK result from your program. If it does not arrive, and there can be thousands of reasons for that, we will notify you. This solution is more robust and reliable than trying to identify separate problems. And last but not least the service is located on an independent network shielded from any local issues you might suffer from.

A few practical examples of how to

Shell script
rsync --archive production:/data/ /prod-backup/ && \
	curl https://user:123@api.pingjoe.com/nas-data/1d6h
Translation: Hey "nas-data" spotter! All is OK. Expect the next ping in 1 day and 6 hours.
5 0 * * * /cloud/backup && /usr/bin/curl https://user:123@api.pingjoe.com/cloud/1d90m
Translation: Hey "cloud" spotter! All is OK. Expect the next ping in 1 day and 90 minutes.
wget -q -O- https://user:123@api.pingjoe.com/some-job/1M
Translation: Hey "some-job" spotter! Expect the next ping in 1 month.
You get the idea.
PINGJOE integration in shell cron script
Warning e-mail example.
PINGJOE warning e-mail
Warning e-mail example.


  1. Create a new account or log in if you have one already.
  2. Set up your API access user name and password.
  3. Create a new named "spotter" that will wait for your next ping. Creation is the same as pinging - just ping a nonexistent spotter. To create a spotter named "test" that will expect the next ping in 1 minute, visit https://api.pingjoe.com/test/1m.

Congratulations! You just created your first spotter!

We will notify you shortly if the page https://api.pingjoe.com/test/1m is not requested in the next minute.

Feel free to change the "test" name or the last time parameter "1m". The time parameter informs the spotter with each ping when to expect the next ping. The time syntax is simple: a number followed by "m" (minutes), "h" (hours), "d" (days), "M" (months). Example: "1M20h". See here for more.

The ping requires API user authentication so don't forget to specify valid credentials in the URL if you use non-interactive tools like wget, curl, links, lynx, or others. Example:

curl https://user:password@api.pingjoe.com/test/1d10h20m
Enjoy and don't forget to leave feedback!