mirror of
https://github.com/jooray/signal-monitoring.git
synced 2026-01-27 00:43:41 +00:00
initial commit
This commit is contained in:
parent
3bac7e19b8
commit
667128af86
43
README.md
Normal file
43
README.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# signal-monitoring
|
||||||
|
|
||||||
|
This program is for simple server monitoring and notifications with signal-cli.
|
||||||
|
It's goal is to be able to run on supersimple servers, like NAS, raspberry pi,
|
||||||
|
home routers, etc.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
First, install and configure [signal-cli](https://github.com/AsamK/signal-cli)
|
||||||
|
(or replace script in notify function for different kind of notification).
|
||||||
|
|
||||||
|
Then modify script and configure your sending number, recipient number and
|
||||||
|
optionally path to java. I add PATH to signal-cli and java commands as well.
|
||||||
|
|
||||||
|
Then at the bottom of the script, configure ping checks and URL string match
|
||||||
|
checks.
|
||||||
|
|
||||||
|
check_ping takes one argument, which is the name of the server
|
||||||
|
|
||||||
|
check_url takes three arguments: "check identificator" (can be anything recognizable that can be a part of filename, such as hostname), URL and string to look for on the web page.
|
||||||
|
|
||||||
|
The last signal-cli command just downloads all messages for this instance and
|
||||||
|
drops them. Use this if this script is the only user using this server to
|
||||||
|
ease up storage requirements for signal servers and make sure that it does not
|
||||||
|
store too much (encrypted) messages for you.
|
||||||
|
|
||||||
|
## Cron
|
||||||
|
|
||||||
|
Run it from cron or task scheduler of your OS. Please refer to the documentation
|
||||||
|
of your OS.
|
||||||
|
|
||||||
|
## Why this project
|
||||||
|
|
||||||
|
I wanted to be able to perform a simple monitoring for my hosted server from
|
||||||
|
my home NAS. Signal is what I read, so e-mail notifications won't do it,
|
||||||
|
I don't read e-mail that often.
|
||||||
|
|
||||||
|
The script sends one notification per hour, if the service is consistently down.
|
||||||
|
When it goes up again, it sends up notification.
|
||||||
|
|
||||||
|
## If you liked this script, donate
|
||||||
|
|
||||||
|
If you like this script, [support me by sending a small donation](https://juraj.bednar.io/en/support-me/)
|
||||||
95
signal-monitoring.sh
Executable file
95
signal-monitoring.sh
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# if you need to add something to path:
|
||||||
|
#PATH=$PATH:/path/to/java:/path/to/signal-cli
|
||||||
|
# for some cases you should explicitly specify JAVA_HOME in
|
||||||
|
# order for signal-cli to work
|
||||||
|
#export JAVA_HOME=/var/packages/Java8/target/j2sdk-image/jre
|
||||||
|
|
||||||
|
# username of the sending entity (phone number in international format)
|
||||||
|
SIGNAL_USER="+1123123123123"
|
||||||
|
|
||||||
|
# phone number of the user that receives the notification
|
||||||
|
NOTIFY_NUMBER="+132132132132"
|
||||||
|
|
||||||
|
# now go to the bottom of the script and specify the checks
|
||||||
|
|
||||||
|
mkdir -p ~/.signal-monitoring && cd ~/.signal-monitoring
|
||||||
|
|
||||||
|
function log {
|
||||||
|
echo "$1" >> ~/.signal-monitoring/log
|
||||||
|
}
|
||||||
|
|
||||||
|
# arguments: notify_text
|
||||||
|
function notify {
|
||||||
|
echo $1 | signal-cli -u ${SIGNAL_USER} send $NOTIFY_NUMBER
|
||||||
|
log "Sending notification ${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# arguments: check_name description
|
||||||
|
function check_passed {
|
||||||
|
check_name=$1
|
||||||
|
description=$2
|
||||||
|
check_filename="${check_name}-error"
|
||||||
|
|
||||||
|
log "check_passed ${check_name} ${description}"
|
||||||
|
|
||||||
|
if [ -f ${check_filename} ]
|
||||||
|
then
|
||||||
|
rm -f $check_filename
|
||||||
|
notify "${description}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# arguments: check_name description
|
||||||
|
function check_failed {
|
||||||
|
check_name=$1
|
||||||
|
description=$2
|
||||||
|
check_filename="${check_name}-error"
|
||||||
|
|
||||||
|
log "check_failed ${check_name} ${description}"
|
||||||
|
|
||||||
|
FOUND=`find ~/.signal-monitoring -mmin -60 -name ${check_name}-error -not -empty -print`
|
||||||
|
if [ -z "$FOUND" ]
|
||||||
|
then # we don't have recent notification (60 minutes)
|
||||||
|
echo "${description}" > "${check_filename}"
|
||||||
|
notify "${description}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# argument: hostname
|
||||||
|
function check_ping {
|
||||||
|
server=$1
|
||||||
|
if ping -c 5 -q $server > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
check_passed ${server}-ping "${server} ping is up"
|
||||||
|
else
|
||||||
|
check_failed ${server}-ping "${server} ping is not responding"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# arguments: check_name url content_to_look_for
|
||||||
|
function check_url {
|
||||||
|
check_name=$1
|
||||||
|
url=$2
|
||||||
|
content_to_look_for=$3
|
||||||
|
if wget -q -O - "$url" | grep "$content_to_look_for" > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
check_passed ${check_name}-url "${check_name} UP: ${url} now contains ${content_to_look_for}"
|
||||||
|
else
|
||||||
|
check_failed ${check_name}-url "${check_name} DOWN: ${url} does not contain ${content_to_look_for}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# here are the checks
|
||||||
|
|
||||||
|
# check pings
|
||||||
|
check_ping my-first.server.com
|
||||||
|
check_ping my-second.server.com
|
||||||
|
|
||||||
|
check_url my-first.server.com "https://my-first.server.com/url/index.html" "Welcome to My First Server"
|
||||||
|
check_url my-third.server.com "https://my-third.server.com/index.html" "Welcome to My Third Server"
|
||||||
|
|
||||||
|
# Leave this if you don't use signal-cli outside of this script,
|
||||||
|
# otherwise comment out, see readme
|
||||||
|
signal-cli -u $SIGNAL_USER receive > /dev/null 2>&1
|
||||||
Loading…
x
Reference in New Issue
Block a user