diff --git a/contrib/scripts/safe_asterisk b/contrib/scripts/safe_asterisk new file mode 100755 index 0000000000000000000000000000000000000000..584e854d286bed4ac2cac5c3029c5ef9ac8d4567 --- /dev/null +++ b/contrib/scripts/safe_asterisk @@ -0,0 +1,47 @@ +#!/bin/sh +TTY=9 # TTY (if you want one) for Asterisk to run on +CONSOLE=yes # Whether or not you want a console +NOTIFY= # Who to notify about crashes +# +# Don't fork when running "safely" +# +ASTARGS="-f" +if [ "$TTY" != "" ]; then + ASTARGS="${ASTARGS} -vvv" + if [ "$CONSOLE" != "no" ]; then + ASTARGS="${ASTARGS} -c" + fi +fi + +# +# Let Asterisk dump core +# +ulimit -c unlimited + +while :; do + + if [ "$TTY" != "" ]; then + stty sane < /dev/tty${TTY} + asterisk ${ASTARGS} >& /dev/tty${TTY} < /dev/tty${TTY} + else + asterisk ${ASTARGS} + fi + EXITSTATUS=$? + #echo "Asterisk ended with exit status $EXITSTATUS" + if [ "$EXITSTATUS" = "0" ]; then + # Properly shutdown.... + echo "Asterisk shutdown normally." + exit 0 + elif [ $EXITSTATUS -gt 128 ]; then + let EXITSIGNAL=EXITSTATUS-128 + echo "Asterisk exited on signal $EXITSIGNAL." + if [ "$NOTIFY" != "" ]; then + echo "Asterisk exited on signal $EXITSIGNAL. Might want to take a peek." | \ + mail -s "Asterisk Died" $NOTIFY + fi + else + echo "Asterisk died with code $EXITSTATUS. Aborting." + exit 0 + fi + echo "Automatically restarting Asterisk." +done diff --git a/redhat/asterisk.spec b/redhat/asterisk.spec index 3688af2fd7ec87045ce9c9fad4a109d7bf423823..3a754088c3988c5d2f035e25730998ecd0d8f4de 100755 --- a/redhat/asterisk.spec +++ b/redhat/asterisk.spec @@ -53,6 +53,8 @@ ln -s /var/spool/asterisk/vm /var/lib/asterisk/sounds/vm # Asterisk # %attr(0755,root,root) /usr/sbin/asterisk +%attr(0755,root,root) /usr/sbin/safe_asterisk +%attr(0755,root,root) /usr/sbin/astgenkey # # Sound files @@ -64,6 +66,10 @@ ln -s /var/spool/asterisk/vm /var/lib/asterisk/sounds/vm %attr(0644,root,root) /var/lib/asterisk/sounds/digits/*.gsm %attr(0755,root,root) %dir /var/lib/asterisk/images %attr(0644,root,root) /var/lib/asterisk/images/* +%attr(0755,root,root) %dir /var/lib/asterisk/keys +%attr(0644,root,root) /var/lib/asterisk/keys/* +%attr(0755,root,root) %dir /var/lib/asterisk/agi-bin +%attr(0755,root,root) %dir /var/lib/asterisk/agi-bin/* # # Example voicemail files diff --git a/safe_asterisk b/safe_asterisk new file mode 100755 index 0000000000000000000000000000000000000000..584e854d286bed4ac2cac5c3029c5ef9ac8d4567 --- /dev/null +++ b/safe_asterisk @@ -0,0 +1,47 @@ +#!/bin/sh +TTY=9 # TTY (if you want one) for Asterisk to run on +CONSOLE=yes # Whether or not you want a console +NOTIFY= # Who to notify about crashes +# +# Don't fork when running "safely" +# +ASTARGS="-f" +if [ "$TTY" != "" ]; then + ASTARGS="${ASTARGS} -vvv" + if [ "$CONSOLE" != "no" ]; then + ASTARGS="${ASTARGS} -c" + fi +fi + +# +# Let Asterisk dump core +# +ulimit -c unlimited + +while :; do + + if [ "$TTY" != "" ]; then + stty sane < /dev/tty${TTY} + asterisk ${ASTARGS} >& /dev/tty${TTY} < /dev/tty${TTY} + else + asterisk ${ASTARGS} + fi + EXITSTATUS=$? + #echo "Asterisk ended with exit status $EXITSTATUS" + if [ "$EXITSTATUS" = "0" ]; then + # Properly shutdown.... + echo "Asterisk shutdown normally." + exit 0 + elif [ $EXITSTATUS -gt 128 ]; then + let EXITSIGNAL=EXITSTATUS-128 + echo "Asterisk exited on signal $EXITSIGNAL." + if [ "$NOTIFY" != "" ]; then + echo "Asterisk exited on signal $EXITSIGNAL. Might want to take a peek." | \ + mail -s "Asterisk Died" $NOTIFY + fi + else + echo "Asterisk died with code $EXITSTATUS. Aborting." + exit 0 + fi + echo "Automatically restarting Asterisk." +done