📄 safe_asterisk_restart
字号:
#!/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-firstLOGFILE=/var/log/asterisk/safe_asterisk_restart.logASTERISK=/usr/sbin/asteriskSAFE_ASTERISK=/usr/sbin/safe_asteriskDELAY=1 # Seconds between steps in countdownCOUNTDOWN_FROM=5 # Steps to count downDO_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 secsfunction 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;fiecho "`date`: $0 invoked" >> $LOGFILE# bashfor ido 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 fidone[[ $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 $PROCVICTIMSdo ps axf | grep -w $i | grep -v grepdone
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -