pad.libre-service.eu-etherpad/bin/safeRun.sh
2020-06-03 23:11:44 -04:00

66 lines
1.7 KiB
Bash
Executable file

#!/bin/sh
# This script ensures that ep-lite is automatically restarting after
# an error happens
# Handling Errors
# 0 silent
# 1 email
ERROR_HANDLING=0
# Your email address which should receive the error messages
EMAIL_ADDRESS="no-reply@example.com"
# Sets the minimum amount of time between the sending of error emails.
# This ensures you do not get spammed during an endless reboot loop
# It's the time in seconds
TIME_BETWEEN_EMAILS=600 # 10 minutes
# DON'T EDIT AFTER THIS LINE
pecho() { printf %s\\n "$*"; }
log() { pecho "$@"; }
error() { log "ERROR: $@" >&2; }
fatal() { error "$@"; exit 1; }
LAST_EMAIL_SEND=0
LOG="$1"
# Move to the folder where ep-lite is installed
cd $(dirname $0)
# Was this script started in the bin folder? if yes move out
if [ -d "../bin" ]; then
cd "../"
fi
# Check if a logfile parameter is set
[ -n "${LOG}" ] || fatal "Set a logfile as the first parameter"
shift
while [ 1 ]
do
# Try to touch the file if it doesn't exist
[ -f ${LOG} ] || touch ${LOG} || fatal "Logfile '${LOG}' is not writeable"
# Check if the file is writeable
[ -w ${LOG} ] || fatal "Logfile '${LOG}' is not writeable"
# Start the application
bin/run.sh $@ >>${LOG} 2>>${LOG}
# Send email
if [ $ERROR_HANDLING = 1 ]; then
TIME_NOW=$(date +%s)
TIME_SINCE_LAST_SEND=$(($TIME_NOW - $LAST_EMAIL_SEND))
if [ $TIME_SINCE_LAST_SEND -gt $TIME_BETWEEN_EMAILS ]; then
printf "Server was restarted at: $(date)\nThe last 50 lines of the log before the error happens:\n $(tail -n 50 ${LOG})" | mail -s "Pad Server was restarted" $EMAIL_ADDRESS
LAST_EMAIL_SEND=$TIME_NOW
fi
fi
pecho "RESTART!" >>${LOG}
# Sleep 10 seconds before restart
sleep 10
done