mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
add script for simple 'no-brainer' restarts of safe_asterisk (issue #5139)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7748 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
110
contrib/scripts/safe_asterisk_restart
Normal file
110
contrib/scripts/safe_asterisk_restart
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
# vim:textwidth=80:tabstop=4:shiftwidth=4:smartindent
|
||||
#
|
||||
# this scripts prompts the user thrice, then tells asterisk to please shut down,
|
||||
# then kills asterisk and related processes with SIGTERM, then kills asterisk
|
||||
# and related processes with SIGKILL, and then starts asterisk with
|
||||
# safe_asterisk. Three arguments are currently supported, --no-countdown,
|
||||
# --no-prompt and --no-stop-now-first
|
||||
|
||||
LOGFILE=/var/log/asterisk/safe_asterisk_restart.log
|
||||
ASTERISK=/usr/sbin/asterisk
|
||||
SAFE_ASTERISK=/usr/sbin/safe_asterisk
|
||||
|
||||
DELAY=1 # Seconds between steps in countdown
|
||||
COUNTDOWN_FROM=5 # Steps to count down
|
||||
DO_COUNTDOWN=1 # Should I do a countdown before restarting asterisk?
|
||||
DO_PROMPT=1 # Should I prompt the user?
|
||||
TRY_STOP_NOW_FIRST=1 # Attempt a 'stop now' before killing processes. Note
|
||||
# that this might make this script hang if asterisk
|
||||
# can't respond to the command.
|
||||
|
||||
# processes to kill. Please list all AGI scripts here as well as the asterisk
|
||||
# processes, since asterisk may leave them unkilled.
|
||||
PROCVICTIMS="safe_asterisk asterisk mpg123"
|
||||
|
||||
# helper functions
|
||||
# die ["string to print"]
|
||||
function die {
|
||||
if [[ "$1" != "" ]]; then
|
||||
echo $1
|
||||
else
|
||||
echo "ok. no harm done..."
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
# docmd "string to print" "cmd"
|
||||
function docmd {
|
||||
printf "$1..."
|
||||
`$2 >> $LOGFILE 2>&1`
|
||||
RETCODE=$?
|
||||
sleep $DELAY
|
||||
if [[ "$RETCODE" == "0" ]]; then
|
||||
echo " OK"
|
||||
else
|
||||
echo " FAILED"
|
||||
fi
|
||||
}
|
||||
|
||||
# prompt "string" "positive answer"
|
||||
function prompt {
|
||||
printf "$1"
|
||||
read answer
|
||||
if [[ "$answer" != "$2" ]]; then
|
||||
die
|
||||
fi
|
||||
}
|
||||
|
||||
# countdown secs
|
||||
function countdown {
|
||||
echo -n "$1 "
|
||||
if [[ $1 > 0 ]]; then
|
||||
sleep 1
|
||||
countdown $[ $1 - 1 ]
|
||||
else
|
||||
echo "boom!"
|
||||
fi
|
||||
}
|
||||
|
||||
# am I really root?
|
||||
if [[ "$UID" != "0" ]]; then
|
||||
echo "Sorry, only root can do this." >&2
|
||||
exit;
|
||||
fi
|
||||
|
||||
echo "`date`: $0 invoked" >> $LOGFILE
|
||||
|
||||
# bash
|
||||
for i
|
||||
do
|
||||
if [[ "$i" == "--no-countdown" ]]
|
||||
then
|
||||
unset DO_COUNTDOWN
|
||||
fi
|
||||
if [[ "$i" == "--no-prompt" ]]
|
||||
then
|
||||
unset DO_PROMPT
|
||||
fi
|
||||
if [[ "$i" == "--no-stop-now-first" ]]
|
||||
then
|
||||
unset TRY_STOP_NOW_FIRST
|
||||
fi
|
||||
done
|
||||
|
||||
[[ $DO_PROMPT ]] && prompt "Are you sure you want to restart asterisk? (yes/no)? " "yes"
|
||||
[[ $DO_PROMPT ]] && prompt "Really sure? (yes/no)? " "yes"
|
||||
[[ $DO_PROMPT ]] && prompt "Absolutely positive? (YES/no)? " "YES"
|
||||
|
||||
[[ $DO_COUNTDOWN ]] && echo "OK, I'll do it, but if you're not sure about this, press ctrl+c now."
|
||||
[[ $DO_COUNTDOWN ]] && countdown $COUNTDOWN_FROM
|
||||
|
||||
# doing the dirty work
|
||||
[[ $TRY_STOP_NOW_FIRST ]] && docmd "Asking asterisk kindly to shutdown" "$ASTERISK -rx 'stop now'"
|
||||
docmd "Sending asterisk processes the TERM signal" "killall -15 $PROCVICTIMS"
|
||||
docmd "Sending asterisk processes KILL signal" "killall -9 $PROCVICTIMS"
|
||||
docmd "Starting safe_asterisk" "$SAFE_ASTERISK"
|
||||
for i in $PROCVICTIMS
|
||||
do
|
||||
ps axf | grep -w $i | grep -v grep
|
||||
done
|
Reference in New Issue
Block a user