2015-08-25 16:54:13 +02:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
# Script called
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
LOGFILE=~/log/evocluster.log
|
|
|
|
|
|
|
|
|
|
MAIL="jdoe@example.com"
|
|
|
|
|
|
|
|
|
|
mail_error() {
|
2017-08-20 04:31:00 +02:00
|
|
|
|
echo "From: John Doe <jdoe@example.com>
|
2015-08-25 16:54:13 +02:00
|
|
|
|
To: $MAIL
|
|
|
|
|
Subject: [evocluster] check_cron_state.sh
|
|
|
|
|
|
|
|
|
|
$1
|
|
|
|
|
|
|
|
|
|
"|/usr/lib/sendmail -oi -t -f "$MAIL"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
error() {
|
|
|
|
|
echo -n "$(date +"%b %d %T") " >>$LOGFILE
|
|
|
|
|
echo "ERROR: $1" |tee -a $LOGFILE >&2
|
|
|
|
|
mail_error "$1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
info() {
|
|
|
|
|
echo -n "$(date +"%b %d %T") " >>$LOGFILE
|
|
|
|
|
echo "INFO: $1" |tee -a $LOGFILE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Read the state file
|
|
|
|
|
if [ -e ~/state ]; then
|
|
|
|
|
. ~/state
|
|
|
|
|
else
|
|
|
|
|
error '~/state file does not exist, I dont know who am I!'
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check if all required variables are set
|
|
|
|
|
if [ -n "$STATE" ] && [ -n "$IP" ]; then
|
|
|
|
|
LOCAL_STATE=$STATE
|
|
|
|
|
REMOTE_IP=$IP
|
|
|
|
|
else
|
|
|
|
|
error '$STATE or $IP not set in state file!'
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
[ -n "$FORCE_CRON" ] && info 'FORCE_CRON=yes setted. Master is mandated to execute cron.'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$STATE" = "slave" ]; then
|
2017-08-20 04:31:00 +02:00
|
|
|
|
info 'Account is in state slave, execution of cron is disabled'
|
|
|
|
|
exit 1
|
2015-08-25 16:54:13 +02:00
|
|
|
|
else
|
2017-08-20 04:31:00 +02:00
|
|
|
|
# env var $FORCE_CRON is set to yes, execute the cron
|
|
|
|
|
[ "$FORCE_CRON" = "yes" ] && exit 0;
|
|
|
|
|
|
|
|
|
|
### rajouter une règle sudo pour pouvoir exécuter ping ?
|
|
|
|
|
# test if the remote server is alive
|
|
|
|
|
#if ! ping -c1 -w1 $REMOTE_IP; then
|
|
|
|
|
# error "Remote server $IP doesn't seem to be up, I don't know what to do...Add 'FORCE_CRON=yes' in ~/state file to execute user cron"
|
|
|
|
|
# exit 1
|
|
|
|
|
#fi
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
# try to connect to the remote server and check if it isn't a master
|
|
|
|
|
REMOTE_STATE=$(mktemp)
|
|
|
|
|
if ssh $REMOTE_IP [ -e ~/state ]; then
|
|
|
|
|
ssh $REMOTE_IP cat ~/state >$REMOTE_STATE
|
|
|
|
|
elif [ $? -eq 255 ]; then
|
|
|
|
|
error "Failed to connect to slave ($REMOTE_IP)! I don't know what to do.."
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
error "State file does not exist on slave !"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
. $REMOTE_STATE
|
|
|
|
|
rm -rf $REMOTE_STATE
|
|
|
|
|
if [ -n "$STATE" ]; then
|
|
|
|
|
REMOTE_STATE=$STATE
|
|
|
|
|
else
|
|
|
|
|
error '$STATE not set in remote state file!'
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ "$REMOTE_STATE" = "master" ]; then
|
|
|
|
|
error "Remote server $IP is master too. (incoherent state)..."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2015-08-25 16:54:13 +02:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Remote server is slave
|
|
|
|
|
# State is coherent, execute the cron
|
|
|
|
|
info 'Execute user cron'
|
|
|
|
|
|
|
|
|
|
exit 0
|